Eso*_*age 2 dart firebase flutter google-cloud-firestore
我一直在阅读与 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;
}
Run Code Online (Sandbox Code Playgroud)
如您所见,在使用 Futures 和 Streams 时,我相当迷茫。我在 youtube 上观看了 google flutter 开发人员的视频,他们帮助我做到了这一点。我还尝试使用 Future 对象提供的 then() 和 whenCompleted() 方法,但是我发现自己挖了一个越来越大的洞。
非常感谢所有帮助!
要获取用户信息,请尝试以下操作:
Future<DocumentSnapshot> getUserInfo()async{
var firebaseUser = await FirebaseAuth.instance.currentUser();
return await Firestore.instance.collection("users").document(firebaseUser.uid).get();
}
Run Code Online (Sandbox Code Playgroud)
然后FutureBuilder在您的build()方法中使用:
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();
},
),
Run Code Online (Sandbox Code Playgroud)
在方法await内部使用时,需要声明该方法async。您还需要返回一个Future, 才能在屏幕上显示结果,然后您需要使用FutureBuilder小部件。
https://dart.dev/codelabs/async-await
| 归档时间: |
|
| 查看次数: |
4378 次 |
| 最近记录: |