Я не могу заставить свой поток 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);
};
Как заставить его прослушивать обновления даже после первого снимка?