我是 Flutter 的新手。我正在学习教程。我正在创建一个基本的聊天应用程序。当我输入代码时没有错误,但是当我运行代码时出现此错误。我不知道我做错了什么。跟着教程走。在教程中,讲师没有任何错误。
void messagesStream() async {
await for (var snapshot in _firestore.collection('messages').snapshots()) {
for (var message in snapshot.docs) {
print(message.data());
}
}}
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
leading: null,
actions: <Widget>[
IconButton(
icon: Icon(Icons.close),
onPressed: () {
messagesStream();
// _auth.signOut();
// Navigator.pop(context);
}),
],
title: Text('⚡️Chat'),
backgroundColor: Colors.lightBlueAccent,
),
body: SafeArea(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
StreamBuilder<QuerySnapshot>(
stream: _firestore.collection('messages').snapshots(),
// ignore: missing_return
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(
backgroundColor: Colors.lightBlueAccent,
),
);
}
final messages = snapshot.data.docs;
List<MessageBubble> messageBubbles = [];
for (var message in messages) {
final messageText = message.data();
final messageBubble = MessageBubble(
text: messageText,
);
messageBubbles.add(messageBubble);
}
return Expanded(
child: ListView(
padding: EdgeInsets.symmetric(
horizontal: 10.0, vertical: 20.0),
children: messageBubbles,
),
);
}),
答案 0 :(得分:0)
Firestore 值位于地图中,这意味着要访问其中一个值,您需要使用一个键。以此为例:
例如,如果您想访问此消息数据,firestore 会为您提供一个地图,因为它有多个值,这意味着您不能只执行 message.data(),因为它只会检索地图。所以这将是正确的代码:
for (var message in messages) {
final messageData = message.data();
final messageText= messageData['text'];
final messageBubble = MessageBubble(
text: messageText,
);
messageBubbles.add(messageBubble);
}
您看到要从给定的文档数据中检索任何字段,您可以使用 [] 后跟内部字段的名称。试一试,它现在应该可以工作了。