在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);
};
即使在第一个快照之后,如何使它继续监听更新?