我有两个流,其中一个流接收到新事件时需要比较它们的值。现在,我有一个功能几乎可以实现我想要的功能,只是它是一个Future而不是一个stream,因此它只触发一次。
Future<int> getUnreadMessages(String brfID, String conversationID, String uid) async {
DocumentSnapshot conversation = await getConversation(brfID, conversationID).last;
QuerySnapshot messages = await getMessages(brfID, conversationID, 10).last;
int unread = 0;
for (var message in messages.documents) {
if (message.data['time'].millisecondsSinceEpoch > conversation.data['users'][uid]['lastRead'].millisecondsSinceEpoch) {
unread++;
}
}
return unread;
}
我该如何将其转换为流?如果其中一个值不是流,那将很容易。那么我只能使用Firestores .where()
,但这不适用于两个流。
两个流看起来像这样:
Stream<QuerySnapshot> getMessages(String brfID, String conversationID, [int limit]) {
return brfCollection
.document('$brfID/messaging/$conversationID')
.collection('messages')
.orderBy('time', descending: true)
.limit(limit)
.snapshots();
}
Stream<DocumentSnapshot> getConversation(String brfID, String conversationID) {
return brfCollection.document('$brfID/messaging/$conversationID').snapshots();
}