我有一个问题:如何根据initState
中的currentUser
电子邮件监听对文档快照的实时更改。我知道QuerySnapshot
需要使用documents.forEach
才能进行检索,但是DocumentSnapshot
呢?这是我的代码:
@override
void initState() async{
FirebaseUser user = await FirebaseAuth.instance.currentUser();
Firestore.instance.collection('user').document(user.email).snapshots()
.listen((userinfo){
userinfo((userI){
_fname = userI.data['FullName'];
_SSID = userI.data['SSID'];
_email = userI.data['email'];
_image = userI.data['image'];
});
});
super.initState();
}
我可以获得user.email
,但无法收听Firestore。我真的找不到任何与此类似的东西,也许这是一个相对容易解决的问题,因为我仍然是Flutter和Firebase的新手。提前谢谢你。
发布于 2021-07-29 08:43:59
应该是userI.data()['some_key']
而不是userI.data['some_key']
。
https://pub.dev/documentation/cloud_firestore/latest/cloud_firestore/DocumentSnapshot/data.html
也要记住userInfo
,它应该是这样的:
Firestore.instance.collection('user').document(user.email).snapshots().listen((userI) {
_fname = userI.data()['FullName'];
_SSID = userI.data()['SSID'];
_email = userI.data()['email'];
_image = userI.data()['image'];
});
发布于 2021-07-29 13:18:17
您可以将异步逻辑移动到不同的函数中,并在initState
中调用它,如下所示:
@override
void initState() {
super.initState();
_getUserData();
}
Future<void> _getUserData() async {
FirebaseUser user = await FirebaseAuth.instance.currentUser();
Firestore.instance.collection('user').document(user.email).snapshots()
.listen((userinfo) {
setState((){
_fname = userinfo.data['FullName'];
_SSID = userinfo.data['SSID'];
_email = userinfo.data['email'];
_image = userinfo.data['image'];
});
});
}
在使用变量的小部件中,可以轻松地添加null检查并显示空值或加载指示符。
Text(_fname??'')
或
_fname == null ? Center(child: CircularProgressIndicator()) : Text(_fname)
https://stackoverflow.com/questions/68572678
复制相似问题