firebase - 如何使用 flutter 和 dart 从 Cloud Firestore 检索特定数据?

标签 firebase flutter dart google-cloud-firestore

我一直在阅读与 StackOverflow 相关的帖子。但是,我还没有找到一个简单的解决方案,对于像我这样的初学者来说很容易理解。目前,我的 Cloud Firestore 数据库如下所示:

My Cloud Firestore database layout

在用户输入足够的信息来填充文档中的每个字段后(ID 是通过电话身份验证的经过身份验证的用户的 UID),然后它被发送到数据库中。之后,用户将被重定向到应显示每个字段的主屏幕。这就是我被困的地方。下面是我已经开始实现的一个方法,它将返回一个字符串,该字符串将位于文本小部件内,以显示在数据库中找到的用户名。

String getUsername(FirebaseUser user, Firestore firestore) {

    //get the document reference
    DocumentReference docReference = firestore.document("Users/" + user.uid);

    Future<DocumentSnapshot> snapshot = docReference.get();

    Stream<DocumentSnapshot> stream = snapshot.asStream();

    //stub to ignore compiler warnings
    return null;
 }

如您所见,在使用 Futures 和 Streams 时我完全不知所措。我看过 google flutter 开发者在 youtube 上的视频,他们帮助我达到了这一点。我还尝试使用 Future 对象提供的 then() 和 whenCompleted() 方法,但我发现自己挖了一个越来越大的坑。

非常感谢所有帮助!

最佳答案

要获取用户信息,请尝试以下操作:

Future<DocumentSnapshot> getUserInfo()async{
var firebaseUser = await FirebaseAuth.instance.currentUser();
return await Firestore.instance.collection("users").document(firebaseUser.uid).get();
}

然后在您的build() 方法中使用FutureBuilder:

          FutureBuilder(
            future: getUserInfo(),
            builder: (context, AsyncSnapshot<DocumentSnapshot> snapshot) {
              if (snapshot.connectionState == ConnectionState.done) {
                return ListView.builder(
                    shrinkWrap: true,
                    itemCount: 1,
                    itemBuilder: (BuildContext context, int index) {
                      return ListTile(
                        title:
                            Text(snapshot.data.data["email"]),
                      );
                    });
              } else if (snapshot.connectionState == ConnectionState.none) {
                return Text("No data");
              }
              return CircularProgressIndicator();
            },
          ),

在方法中使用await 时,该方法需要声明为async。您还需要返回一个 Future,以便能够在屏幕上显示结果,然后您需要使用 FutureBuilder 小部件。

https://dart.dev/codelabs/async-await

关于firebase - 如何使用 flutter 和 dart 从 Cloud Firestore 检索特定数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61761346/

相关文章:

firebase - 如何将它从userUid()获取到StreamBuilder Flutter

android - 如何在 flutter 中从 web view 返回?

flutter - 如何在tabBar中的选项卡之间制作垂直线?

dart - 使用 pub serve 运行时将自定义参数传递给 dart 应用程序

ios - 推送即将到来,但未更新 firebase DB

firebase - 使用 $set() 将 User 对象添加到 Firebase 中的/users

javascript - 检查 firebase DB 中是否存在某项,如果不存在,则添加新项

json - Flutter/Dart JSON和现有库类的序列化

flutter - 没有脚手架的 DefaultTabController?

unit-testing - Flutter: 'package:shared_preferences/shared_preferences.dart':断言失败:第 33 行 pos 16: 'key.startsWith(_prefix)':不正确