我正在使用 StreamBuilder
将流转换为 Widgets
,但我在运算符中突出显示了我的字符串,并出现错误:
没有为类型“Object”定义运算符“[]”?函数()
这是代码:
void messageStream() async {
await for (var snapshot in _firestore.collection('messages').snapshots()) {
for (var message in snapshot.docs) {
print(message.data());
}
}
}
body: SafeArea(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
StreamBuilder<QuerySnapshot>(
stream: _firestore.collection('messages').snapshots(),
builder: (context, snapshot) { //This is where the second error appeared
if (snapshot.hasData) {
final messages = snapshot.data?.docs;
List<Text> messageWidgets = [];
for (var message in messages!) {
final messageText = message.data['text']; //These are where the errors can be found
final messageSender = message.data['sender'];//These are where the errors can be found.
final messageWidget = Text('$messageText from $messageSender');
messageWidgets.add(messageWidget);
}
return Column(
children: messageWidgets,
);
}
return build(context);
},
),
最佳答案
.data
是一个函数。因此,您必须使用括号 ()
来调用它。此外,您可能必须使用 as
关键字来转换正确的类型。
而不是:
final messageText = message.data['text'];
final messageSender = message.data['sender'];
尝试:
final messageText = (message.data() as Map)['text'];
final messageSender = (message.data() as Map)['sender'];
或者:您可以使用.get()
:
final messageText = message.get('text');
final messageSender = message.get('sender');
关于android - 出现错误;没有为类型 '[]' 定义运算符 'Object? Function()',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74539130/