我有一个保存用户消息的集合。
尽管数据库没有发生明显的变化,但来自它的流不断触发变化。
这有什么问题吗?
我在其上附加了一个流,如下所示:
ClassifiedAdMessage.getReceivedUnreadMessagesStream(toUserId: toUserId)
.listen((event) {
int unreadMessageCount = _unreadMessageCount;
for (final change in event.docChanges) {
switch (change.type) {
case DocumentChangeType.added:
unreadMessageCount++;
//print("New message: ${change.doc.data()}");
break;
case DocumentChangeType.modified:
debugPrint("Modified message: ${change.doc.data()}");
break;
case DocumentChangeType.removed:
//print("Removed message: ${change.doc.data()}");
unreadMessageCount--;
break;
}
}
if (mounted && _unreadMessageCount != unreadMessageCount) {
setState(() {
_unreadMessageCount = unreadMessageCount;
});
}
});
构建被触发,不断增加
_unreadMessageCount
。
我编写的用于公开流的代码:
/// Get a stream on the unread messages for [toUserId] user.
static Query<ClassifiedAdMessage> getReceivedUnreadMessagesQuery(
{required String toUserId}) {
// related to this add (ie. ownerId == toUserId)
return FirebaseFirestore.instance
.collection(collectionName)
.where("toUserId", isEqualTo: toUserId)
.where("readDate", isNull: true)
.withConverter<ClassifiedAdMessage>(
fromFirestore: (snapshot, _) =>
ClassifiedAdMessage.fromMap(snapshot.data()!),
toFirestore: (message, _) => message.toMap(),
);
}
static Stream<QuerySnapshot<ClassifiedAdMessage>>
getReceivedUnreadMessagesStream({required String toUserId}) {
return getReceivedUnreadMessagesQuery(toUserId: toUserId).snapshots();
}