簡體   English   中英

我無法在 flutter 中接收來自 firebase 的 stream 消息

[英]I cannot stream messages from firebase in flutter

我正在從 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()'.
  • “對象”來自“飛鏢:核心”。 嘗試將運算符更正為現有運算符,或定義“[]”運算符。 final messageText = message.data['text']; ^ lib/screens/chat_screen.dart:73:55:錯誤:沒有為 class 對象定義運算符“[]”? 功能()'。
  • “對象”來自“飛鏢:核心”。 嘗試將運算符更正為現有運算符,或定義“[]”運算符。 final messageSender = message.data['sender']; ^ lib/screens/chat_screen.dart:76:35:錯誤:未為 class“文本”定義方法“添加”。
  • 'Text' 來自 'package:flutter/src/widgets/text.dart' ('/C:/src/flutter/packages/flutter/lib/src/widgets/text.dart')。 嘗試將名稱更正為現有方法的名稱,或定義一個名為“add”的方法。 messageWidget.add(messageWidget); ^^^ lib/screens/chat_screen.dart:80:23:錯誤:無法將“List”類型的值分配給“Widget”類型的變量。
  • “列表”來自“dart:core”。
  • 'Text' 來自 'package:flutter/src/widgets/text.dart' ('/C:/src/flutter/packages/flutter/lib/src/widgets/text.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: 錯誤:必須返回非空值,因為返回類型“Widget”不允許 null。
  • 'Widget' 來自 'package:flutter/src/widgets/framework.dart' ('/C:/src/flutter/packages/flutter/lib/src/widgets/framework.dart')。 構建器:(上下文,快照){ ^

像這樣更改您的代碼

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

該錯誤是由於 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'];

打開花括號后 { 只需添加此代碼

          var data = message.data() as Map; 

並將現有代碼更改為

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM