【问题标题】:How to get another users ID from Firebase in Flutter?如何在 Flutter 中从 Firebase 获取另一个用户 ID?
【发布时间】:2021-04-05 09:42:10
【问题描述】:

我正在尝试通过从 firebase 写入用户的 uid 来将用户添加到我的联系人中。我需要在文本字段中写入用户 ID,并且在按下按钮时我需要 Firebase 检查此 uid,如果它存在,我的应用程序需要将其添加到联系人中。有什么解决办法吗? p.s 我正在制作信使应用程序,它是“添加新联系人”功能。如果有人告诉我如何使用他们的 ID 创建聊天或创建与 2 个用户相同的单独“聊天 ID”,那就太好了。顺便说一句,我正在使用实时数据库

【问题讨论】:

    标签: firebase flutter dart


    【解决方案1】:

    要检查用户是否存在,您可以执行以下操作:

        final users = FirebaseFirestore.instance.collection('users');
        final userDoc =
            await users.doc('PUT THE UID TO SEARCH FOR HERE').get();
        if (userDoc.exists) {
         // do something
        }
    

    要使其可重用,请将其转换为函数:

    Future<bool> userExists(String uid) async {
        final users = FirebaseFirestore.instance.collection('users');
        final userDoc =
            await users.doc(uid).get();
        return userDoc.exists;
    }
    

    现在您可以使用任何 uid 调用该函数:

    bool _userExists = await userExists('UID');
    

    这是一个完整的代码示例:

    import 'package:flutter/material.dart';
    
    void main() {
      runApp(App());
    }
    
    class App extends StatefulWidget {
      @override
      _AppState createState() => new _AppState();
    }
    
    class _AppState extends State<App> {
      // This key is used to control the SnackBars
      final key = GlobalKey<ScaffoldMessengerState>();
      final textCtrlr = TextEditingController();
      bool isLoading = false;
    
      @override
      void dispose() {
        super.dispose();
        textCtrlr.dispose();
      }
    
      Future<bool> userExists(String uid) async {
        final users = FirebaseFirestore.instance.collection('users');
        final userDoc = await users.doc(uid).get();
        return userDoc.exists;
      }
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: ScaffoldMessenger(
            key: key, // Assign the key to the ScaffoldMessenger
            child: Scaffold(
              body: Center(
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: <Widget>[
                    Padding(
                      padding: const EdgeInsets.all(8.0),
                      child: SizedBox(
                        child: TextFormField(
                          controller: textCtrlr,
                        ),
                        width: 200.0,
                      ),
                    ),
                    isLoading
                        ? const SizedBox(
                            child: CircularProgressIndicator(
                              strokeWidth: 2.0,
                            ),
                            width: 20.0,
                            height: 20.0,
                          )
                        : ElevatedButton(
                            onPressed: () async {
                              final uid = textCtrlr.text;
    
                              setState(() => isLoading = false);
                              final bool _userExists = await userExists(uid);
                              setState(() => isLoading = false);
    
                              if (_userExists) {
                                // The user exists and can
                                // be added to contacts
                                key.currentState?.showSnackBar(
                                  SnackBar(
                                    content: Text(
                                      'User added!',
                                    ),
                                    backgroundColor: Colors.green,
                                    behavior: SnackBarBehavior.floating,
                                  ),
                                );
                                return;
                              }
    
                              // The user doesn't exist
                              key.currentState?.showSnackBar(
                                SnackBar(
                                  content: Text(
                                    'The user doesn\'t exist',
                                  ),
                                  backgroundColor: Theme.of(context).errorColor,
                                  behavior: SnackBarBehavior.floating,
                                ),
                              );
                            },
                            child: const Text('Search for user'),
                          ),
                  ],
                ),
              ),
            ),
          ),
        );
      }
    }
    

    【讨论】:

    • 它有效,但它是硬编码的,我怎样才能使这个变量(可编辑)?
    • 我编辑了答案,如果它帮助您将其标记为正确。 :)
    • 很抱歉,如果它很明显,但我无法理解。我应该把“bool _userExists = await userExists('UID');”放在哪里因为当我试图把它放在任何地方时,它说没有异步它就无法工作,但是在这种情况下我必须把异步放在哪里
    • 您可以将其添加到按下“添加”按钮时发生的函数中。例如,当按下它时,您会查看用户是否存在,如果是,则添加用户,如果不存在,则显示错误消息。
    • 我目前有一些工作要做,但如果你愿意,我可以在一个小时内给你一个完整的代码示例吗?
    猜你喜欢
    • 2018-09-24
    • 2019-05-28
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    • 2021-04-04
    • 2020-02-28
    • 2019-07-11
    • 2018-05-28
    相关资源
    最近更新 更多