如何使Firestore流持久

时间:2019-05-13 09:00:45

标签: firebase dart flutter google-cloud-firestore

在redux应用程序中的第一个快照之后,我无法使Firestore流继续工作。第一次运行时,它可以为我提供正确的数据,但不会一直监听更新。

我尝试更改如何处理snapshot()的结果,并使用处理程序来处理错误或完成操作。但是我不明白问题的原因

store_middleware.dart:

var messagesRef = Firestore.instance.collection('messages')
      .orderBy('timestamp', descending: false);

Middleware<AppState> _loadMessages() {
  return (Store<AppState> store, action, NextDispatcher next) {
    messagesStream = messagesRef.where('conversationId', isEqualTo: conversationId)
      .snapshots()
      .listen(
        (msgSnap) async{ 
          msgSnap.documentChanges.forEach((doc) {
            switch (doc.type) {
              case DocumentChangeType.added:
                store.dispatch(AddMessage(Message(
                  doc.document.documentID,
                  doc.document.data['conversationId'],
                  doc.document.data['fromUserId'],
                  doc.document.data['content'],
                  DateTime.fromMillisecondsSinceEpoch( doc.document.data['timestamp'], isUtc: true),
                )));
                break;
              case DocumentChangeType.modified:
                //update message
                break;
              case DocumentChangeType.removed:
                print('doc removed');
                //remove message
                break;
              default:
                //do nothing
                break;
            }

          });
        },
        onDone: () => print('stream finished'), //doesn't print anything
        onError: (e) => print('error: ${e.toString()}') //doesn't print anything
      );

    next(action);
  };

即使在第一个快照之后,如何使它继续监听更新?

0 个答案:

没有答案