android - 出现错误;没有为类型 '[]' 定义运算符 'Object? Function()'

标签 android flutter firebase dart

我正在使用 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/

相关文章:

java - 为什么使用 Material 按钮时我的应用程序崩溃?

android - 检查密码是否存在并在锁定屏幕上启用 - Android

android - 在android中隐藏媒体 Controller 的播放暂停按钮

flutter - 创建Json数组并使用SharedPreferences列出

flutter - 我如何知道何时在 TextFormField 上按下键盘键?

java - 如何在 Joda Time 上计算带负号的 2 个周期的总和

flutter - 将 flutter app 从 ios 移动到 windows 时出现问题,反之亦然

android - 我可以实时从 Firebase 数据库读取数据并在 Android 应用程序中不断更新吗?

javascript - 云函数: Avoid Nesting Promises for different conditions

android - Firebase 版本 9.2.1 是否可用?