我一直在阅读与 StackOverflow 相关的帖子。但是,我还没有找到一个简单的解决方案,对于像我这样的初学者来说很容易理解。目前,我的 Cloud Firestore 数据库如下所示:
在用户输入足够的信息来填充文档中的每个字段后(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
小部件。
关于firebase - 如何使用 flutter 和 dart 从 Cloud Firestore 检索特定数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61761346/