Flutter 上的 Firebase 数据流问题

问题描述 投票:0回答:0

我有一个保存用户消息的集合。

尽管数据库没有发生明显的变化,但来自它的流不断触发变化。

这有什么问题吗?

我在其上附加了一个流,如下所示:


      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();
  }

flutter firebase dart stream
© www.soinside.com 2019 - 2024. All rights reserved.