Flutter:错误状态:DocumentSnapshotPlatform | cloudfirestore中不存在字段



我正在尝试将数据从云文件存储中提取到Text小部件。我确实从cloudfirestore中获取了Querysnapshot文档数据,并在文本小部件中显示了这些数据。但它显示了上述错误。

body: SafeArea(
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
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.get('text');
final senderText = message.get('sender');
final messageWidget = Text('$messageText from $senderText');
messageWidgets.add(messageWidget);
}
return Column(
children: messageWidgets,
);
}
return Text("No widget to build");
},
),
Container(
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Expanded(child: TextField(
onChanged: (value) {
messageText = value;
},
)),
ElevatedButton(
onPressed: () {
_firestore.collection('messages').add(
{'text': messageText, 'sender': LoggedInUser.email});
},
child: Text("Send"),
)
],
),
)
],
),
),
),

我可以使用打印数据

Print(message.data());

如何解决此问题?

您在标题中提到的错误说明了一切:您的一些数据可能缺少您正在查找的一些字段。

我可以看到你正在提取textsender密钥。这意味着,对于循环中的某些message,即Firestore数据库中的某个文档,缺少这两个键中的一个。

正如您所说,使用print(message.data());来调查何处以及原因。

只需确保将print语句放在if(snapshot.hasData)的正下方,以便在控制台引发BadState异常之前打印到控制台。

最新更新