[英]I cannot access the data when extracting data from firebase in Flutter
[英]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.