出错;运算符'[]'未为类型"对象?函数()'



我正在使用StreamBuilder将流转换为Widgets,但我在操作符中突出显示了我的字符串,并出现了错误:

The operator '[]' isn't defined for the type 'Object? Function()

这是代码:

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');

最新更新