【问题标题】:Flutter firebase streamsFlutter Firebase 流
【发布时间】:2021-10-12 17:45:44
【问题描述】:

我正在尝试使用

StreamBuilder<QuerySnapshot>(
            stream: _firestore.collection('messages').snapshots(),
            builder: (context,snapshot){
              if(snapshot.hasData) {
                final messages = snapshot.data.docs;
                List<Text> messageWidgets=[];
                for(var message in messages){
                 final messageText=message.data['text'];
                 final messageSender=message.data['sender'];
                 final messageWidget=
                     Text('$messageText from $messageSender');
                 messageWidgets.add(messageWidget);
                }
              }
            },
            ),

I am getting error in
final messageText=message.data['text'];
final messageSender=message.data['sender'];

我知道这可能是因为新的更新,但我想访问它并且在文档中找不到类似的内容。

在文档中的数据库中,我有两个字段 sender 和 text,这是我想分别从 messageText 和 messageSender 中的数据中获取的内容。还请建议一些我可以阅读的来源,以便下次我不需要问这样的问题。

【问题讨论】:

  • 错误信息是什么?

标签: firebase flutter google-cloud-firestore stream


【解决方案1】:

更改这些行:

final messageText=message.data['text'];
final messageSender=message.data['sender'];

到:

final messageText=(message.data() as Map<String, dynamic>)['text'];
final messageSender=(message.data() as Map<String, dynamic>)['sender'];

可以通过调用.data() 方法来检索QueryDocumentSnapshot 中包含的数据。

【讨论】:

  • 感谢您的宝贵时间,但这不起作用。我使用 get('text) 效果很好。
  • 没关系。当您说“这不起作用”时,您遇到了什么错误?
  • 只是在['text']下显示红线,运行失败
  • 你能把鼠标悬停在红线上看看实际的错误是什么吗?红线总是有相应的错误。
  • 是的,当然,运算符“[]”没有为“对象”类型定义。 (文档)尝试定义运算符'[]'。
猜你喜欢
  • 2020-06-07
  • 2020-09-18
  • 2020-03-21
  • 2020-10-15
  • 1970-01-01
  • 2021-12-11
  • 2021-06-07
  • 1970-01-01
  • 2022-01-01
相关资源
最近更新 更多