首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DocumentSnapshot监听器

DocumentSnapshot监听器
EN

Stack Overflow用户
提问于 2021-07-29 16:35:20
回答 2查看 43关注 0票数 0

我有一个问题:如何根据initState中的currentUser电子邮件监听对文档快照的实时更改。我知道QuerySnapshot需要使用documents.forEach才能进行检索,但是DocumentSnapshot呢?这是我的代码:

代码语言:javascript
运行
复制
@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的新手。提前谢谢你。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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,它应该是这样的:

代码语言:javascript
运行
复制
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'];
});
票数 1
EN

Stack Overflow用户

发布于 2021-07-29 13:18:17

您可以将异步逻辑移动到不同的函数中,并在initState中调用它,如下所示:

代码语言:javascript
运行
复制
 @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检查并显示空值或加载指示符。

代码语言:javascript
运行
复制
Text(_fname??'')

代码语言:javascript
运行
复制
_fname == null ? Center(child: CircularProgressIndicator()) : Text(_fname)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68572678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档