【发布时间】:2020-08-16 11:28:07
【问题描述】:
我的应用中有一个简单的聊天功能,只有文字。现在我正在使用一个 StreamProvider,它利用了 Provider 包。像这样:
return MultiProvider(
providers: [
FutureProvider.value(
value: DatabaseProvider().getDMProfile(pairing.dmId)),
FutureProvider.value(
value: DatabaseProvider().getPlayerProfile(pairing.playerId)),
StreamProvider.value(value: ChatProvider().streamMessages(chatName)),
],
child: ChatScreen(
hidden: isPlayer ? pairing.playerHidden : pairing.dmHidden,
isPlayer: isPlayer,
chatName: chatName,
),
);
这是流的代码:
Stream<List<Message>> streamMessages(String chatId) {
var ref = db
.collection(CHAT_COLLECTION)
.document(chatId)
.collection(MESSAGES_COLLECTION)
.orderBy('timestamp', descending: true);
return ref.snapshots().map((list) =>
list.documents.map((doc) => Message.fromMap(doc.data)).toList());
}
这一切都很好,因为我创建了一个 ListView 来显示聊天。我想知道的是,如果像这样提取所有消息是提高效率的正确方法。如果没有,我如何添加分页,以便用户向上滚动时加载其他过去的消息。
【问题讨论】:
标签: flutter