我正在尝试将数据从云文件存储中提取到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());
如何解决此问题?
您在标题中提到的错误说明了一切:您的一些数据可能缺少您正在查找的一些字段。
我可以看到你正在提取text
和sender
密钥。这意味着,对于循环中的某些message
,即Firestore数据库中的某个文档,缺少这两个键中的一个。
正如您所说,使用print(message.data());
来调查何处以及原因。
只需确保将print
语句放在if(snapshot.hasData)
的正下方,以便在控制台引发BadState
异常之前打印到控制台。