我正在使用 Flutter 和 Firebase 開發聊天應用程式。我是 Dart 的新手,所以當我想創建一個從一個集合(論壇)獲取(使用等待)特定檔案并使用論壇檔案的陣列屬性查詢并從另一個集合回傳 Stream 的函式時遇到了困難(打開訊息)。我當前解決方案的問題是它總是回傳一個空陣列。我確定我使用的關鍵字或邏輯不正確。你能幫我重構我的方法嗎?
Stream<List<ChatMessage>> getForumChatStream(String forumId) async* {
List<ChatMessage> messages = [];
var docSnap = await firestore.collection('forums').doc(forumId).get();
Forum forum = Forum.fromMap(docSnap.data()!);
firestore
.collection('openMessages')
.where('messageId', whereIn: forum.messageIds)
.orderBy('timeSent', descending: true)
.snapshots()
.map((event) {
for (var document in event.docs) {
messages.add(ChatMessage.fromMap(document.data()));
}
});
//print('LENGTH:' messages.length.toString());
yield messages;}
uj5u.com熱心網友回復:
您可以使用以下方法。
Stream<List<ChatMessage>> getForumChatStream(String forumId) async* {
final firestore = FirebaseFirestore.instance;
List<ChatMessage> messages = [];
var docSnap = await firestore.collection('forums').doc(forumId).get();
Forum forum = Forum.fromMap(docSnap.data()!);
final result = firestore
.collection('openMessages')
.where('messageId', whereIn: forum.messageIds)
.orderBy('timeSent', descending: true)
.snapshots();
await for (final r in result) {
final docs = r.docs;
for (final document in docs) {
messages.add(ChatMessage.fromMap(document.data()));
yield messages;
}
}
}
或者
Stream<List<ChatMessage>> getForumChatStream(String forumId) async* {
final firestore = FirebaseFirestore.instance;
List<ChatMessage> messages = [];
var docSnap = await firestore.collection('forums').doc(forumId).get();
Forum forum = Forum.fromMap(docSnap.data()!);
yield* firestore
.collection('openMessages')
.where('messageId', whereIn: forum.messageIds)
.orderBy('timeSend', descending: true)
.snapshots()
.map((event) =>
event.docs.map((e) => ChatMessage.fromMap(e.data())).toList());
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/530404.html
標籤:扑镖飞镖异步飞镖流
上一篇:如何解決此回應型別“({boolgrowable})=>List<DropdownMenuItem<dynamic>>”不是“List<DropdownMenuIt
