我无法在Flutter中从firebase传输消息

6l7fqoea  于 2022-12-14  发布在  Flutter
关注(0)|答案(3)|浏览(142)

我正在从Angela YU学习Flutter聊天应用程序,但这部分代码就像她写的一样,但对我来说不工作,它有很多错误

StreamBuilder<QuerySnapshot>(
          stream: _firestore.collection('messages').snapshots(),
          builder: (context, snapshot) {
            if (!snapshot.hasData) {
              return Center(
                child: CircularProgressIndicator(
                  backgroundColor: Colors.lightBlueAccent,
                ),
              );
            }
            final messages = snapshot.data?.docs;
            List<Text> messageWidgets = [];
            for (var message in messages!) {
              final messageText = message.data['text'];
              final messageSender = message.data['sender'];
              final messageWidget =
                  Text('$messageText from $messageSender');
              messageWidget.add(messageWidget);
            }
            return Column(
              children: [
                messageWidgets,
              ],
            );
          },
        ),

以下是错误:

lib/screens/chat_screen.dart:72:53: Error: The operator '[]' isn't defined for the class 'Object? Function()'.
  • 'Object'来自'dart:core'。请尝试将运算子更正为现有的运算子,或定义'[]'运算子。final messageText = message.data ['text'];第一个字符串是什么?错误:没有为类“Object?Function()”定义运算符“[]”。
  • 'Object'来自'dart:core'。请尝试将运算子更正为现有的运算子,或定义'[]'运算子。final messageSender = message.data ['sender'];^ lib/screens/chat_screens.dart:76:35:您可以使用以下命令来创建一个对话框:错误:没有为类“Text”定义方法“add”。
  • 'Text'来自'package:flutter/src/widgets/text.dart'('/C:/src/flutter/packages/flutter/lib/src/widgets/text. dart')。请尝试将名称更正为现有方法的名称,或定义一个名为'add'的方法。messageWidget.add(messageWidget);第一个字符串是一个字符串,第二个字符串是一个字符串。错误:无法将类型为“List”的值分配给类型为“Widget”的变量。
  • “列表"来自”dart:core“。
  • “文本”来自“软件包:flutter/源代码/小部件/文本.dart”(“/C:/源代码/flutter/软件包/flutter/lib/源代码/小部件/文本. dart”)。
  • “窗口小部件”来自“软件包:flutter/src/widgets/framework.dart”(“/C:/src/flutter/packages/flutter/lib/src/widgets/framework. dart”)。消息窗口小部件,^ lib/screens/chat_screens.dart:67:24:错误:必须返回非空值,因为返回类型“Widget”不允许空值。
  • “窗口小部件”来自“软件包:flutter/src/widgets/framework.dart”(“/C:/src/flutter/packages/flutter/lib/src/widgets/framework. dart”)。构建器:(上下文、快照){ ^
kqlmhetl

kqlmhetl1#

像这样更改代码

final messages = snapshot.data?.docs;
            List<Text> messageWidgets = [];
            for (var message in messages) {
              var data = message.data() as Map; // add Typecast 
              final messageText = data['text'];
              final messageSender = data['sender'];
              final messageWidget = Text('$messageText from $messageSender');
              messageWidgets.add(messageWidget); // you have to add item to list
            }
            return Column(
              children: messageWidgets // your list should assign to children
            );
628mspwn

628mspwn2#

该错误是由于Firestore库的版本升级中发生了重大更改而导致的。
请参阅https://firebase.flutter.dev/docs/firestore/2.0.0_migration/

溶液:

更改此项

final messageText = message.data['text'];

更改为:

final messageText = (message.data as Map<String, dynamic>)['text'];
mjqavswn

mjqavswn3#

打开大括号后{只需添加以下代码

var data = message.data() as Map;

并将现有代码更改为

final messageText = data['text'];
          final messageSender = data['sender']

相关问题