【发布时间】:2021-11-10 18:30:25
【问题描述】:
我正在学习 Udemy Flutter 课程,并且我正在处理 Firebase 的一章。该课程大约有 3-4 年的历史,并且似乎已经足够大,以至于示例完成的代码在访问 Firebase 部分时会崩溃。我从头开始了一个新项目,并拼凑了一些零碎的东西来让它大部分运行起来,但我现在已经走到了死胡同。新项目和 firebase 插件是 Sound Null,而类代码不是。从数据库获取和打印数据工作正常,直到我尝试将它连接到流。我在迭代收到的文档时特别遇到了问题。
当我在 for-in 循环中使用(Flutter)snapshot.data 设置消息变量并尝试遍历返回的文档(#1)时,我遇到了一个空问题。如果不将类型 (#1a) 指定为 AsyncSnapshot<dynamic>,我无法遍历不可为空的 for-in 循环错误。
更改类型会消除编译时错误,但会产生运行时错误
类型 _JsonQuerySnapshot 不是 Iterable 类型的子类型
Dart 不是我的主要语言,我已经在谷歌上搜索了几个小时,但无济于事。任何帮助表示赞赏。
最终 _firestore = FirebaseFirestore.instance; //
children: <Widget>[
StreamBuilder<QuerySnapshot>(
stream: _firestore.collection('messages').snapshots(),
builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) { //<----Problem #1a here
List<Text> messageWidgets = [];
if (snapshot.hasData) {
final messages = snapshot.data;
for (var message in messages) { //<----------Problem #1 here
final messageText = message.data['text'];
final messageSender = message.data['sender'];
final messageWidget =
Text('$messageText from $messageSender');
messageWidgets.add(messageWidget);
}
}
return Column(
children: messageWidgets,
);
},
【问题讨论】:
标签: firebase flutter dart google-cloud-firestore