简体   繁体   English

我无法在 flutter 中接收来自 firebase 的 stream 消息

[英]I cannot stream messages from firebase in flutter

I am learning Flutter chat app from Angela YU but this part of code is just like as she wrote but for me not working and it has lots of errors我正在从 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,
              ],
            );
          },
        ),

here is the errors:这是错误:

 lib/screens/chat_screen.dart:72:53: Error: The operator '[]' isn't defined for the class 'Object? Function()'.
  • 'Object' is from 'dart:core'. “对象”来自“飞镖:核心”。 Try correcting the operator to an existing operator, or defining a '[]' operator.尝试将运算符更正为现有运算符,或定义“[]”运算符。 final messageText = message.data['text']; final messageText = message.data['text']; ^ lib/screens/chat_screen.dart:73:55: Error: The operator '[]' isn't defined for the class 'Object? ^ lib/screens/chat_screen.dart:73:55:错误:没有为 class 对象定义运算符“[]”? Function()'.功能()'。
  • 'Object' is from 'dart:core'. “对象”来自“飞镖:核心”。 Try correcting the operator to an existing operator, or defining a '[]' operator.尝试将运算符更正为现有运算符,或定义“[]”运算符。 final messageSender = message.data['sender']; final messageSender = message.data['sender']; ^ lib/screens/chat_screen.dart:76:35: Error: The method 'add' isn't defined for the class 'Text'. ^ lib/screens/chat_screen.dart:76:35:错误:未为 class“文本”定义方法“添加”。
  • 'Text' is from 'package:flutter/src/widgets/text.dart' ('/C:/src/flutter/packages/flutter/lib/src/widgets/text.dart'). 'Text' 来自 'package:flutter/src/widgets/text.dart' ('/C:/src/flutter/packages/flutter/lib/src/widgets/text.dart')。 Try correcting the name to the name of an existing method, or defining a method named 'add'.尝试将名称更正为现有方法的名称,或定义一个名为“add”的方法。 messageWidget.add(messageWidget); messageWidget.add(messageWidget); ^^^ lib/screens/chat_screen.dart:80:23: Error: A value of type 'List' can't be assigned to a variable of type 'Widget'. ^^^ lib/screens/chat_screen.dart:80:23:错误:无法将“List”类型的值分配给“Widget”类型的变量。
  • 'List' is from 'dart:core'. “列表”来自“dart:core”。
  • 'Text' is from 'package:flutter/src/widgets/text.dart' ('/C:/src/flutter/packages/flutter/lib/src/widgets/text.dart'). 'Text' 来自 'package:flutter/src/widgets/text.dart' ('/C:/src/flutter/packages/flutter/lib/src/widgets/text.dart')。
  • 'Widget' is from 'package:flutter/src/widgets/framework.dart' ('/C:/src/flutter/packages/flutter/lib/src/widgets/framework.dart'). 'Widget' 来自 'package:flutter/src/widgets/framework.dart' ('/C:/src/flutter/packages/flutter/lib/src/widgets/framework.dart')。 messageWidgets, ^ lib/screens/chat_screen.dart:67:24: Error: A non-null value must be returned since the return type 'Widget' doesn't allow null. messageWidgets, ^ lib/screens/chat_screen.dart:67:24: 错误:必须返回非空值,因为返回类型“Widget”不允许 null。
  • 'Widget' is from 'package:flutter/src/widgets/framework.dart' ('/C:/src/flutter/packages/flutter/lib/src/widgets/framework.dart'). 'Widget' 来自 'package:flutter/src/widgets/framework.dart' ('/C:/src/flutter/packages/flutter/lib/src/widgets/framework.dart')。 builder: (context, snapshot) { ^构建器:(上下文,快照){ ^

Change your code like this像这样更改您的代码

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

The error is coming up as a result of breaking changes in the version upgrades to the Firestore library.该错误是由于 Firestore 库的版本升级发生重大变化而出现的。

See https://firebase.flutter.dev/docs/firestore/2.0.0_migration/请参阅https://firebase.flutter.dev/docs/firestore/2.0.0_migration/

Solution:解决方案:

Change this改变这个

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

to this:对此:

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

after opening the curly braces { just add this code打开花括号后 { 只需添加此代码

          var data = message.data() as Map; 

and change the existing code to并将现有代码更改为

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM