In Flutter Redux Epic middleware, how i can dispatch a action after stream variable changes?
A simple example of the EpicMiddleware:
final allEpics = combineEpics<AppState>([hourglassesStream]);
Firestore firestore = Firestore.instance;
Stream<dynamic> hourglassesStream(
Stream<dynamic> actions, EpicStore<AppState> store) {
return Observable(actions)
.ofType(TypeToken<ConnectToDataSourceAction>())
.switchMap((ConnectToDataSourceAction requestAction) {
getHourglasses(action.userId).listen((hourglass) {
LoadHourglassesHistoryAction(
hourglass.map(Hourglass.fromEntity).toList());
});
});
}
Observable<List<HourglassEntity>> getHourglasses(String userId) {
return Observable(firestore
.collection('users')
.document(userId)
.collection('hourglassLogs')
.snapshots()
.map((snapshot) {
return snapshot.documents.map((doc) {
return HourglassEntity(
doc['completedTime'],
doc['projectName'],
doc['userId'],
);
}).toList();
}));
}
I tried some diferents methods to dispatch this LoadHourglassesHistoryAction after the hourglass variable changed from observable, but dont dispatch. Is possible dispatch a action after the Observable change?
Used packages:
redux_epics: ^0.10.0 &
rxdart: ^0.18.0
You have to return the observable/stream, to dispatch the action
Stream<dynamic> hourglassesStream(
Stream<dynamic> actions, EpicStore<AppState> store) {
return Observable(actions)
.ofType(TypeToken<ConnectToDataSourceAction>())
.switchMap((ConnectToDataSourceAction requestAction) {
return getHourglasses(action.id).map((hourglass) =>
LoadHourglassesHistoryAction(
hourglass.map(Hourglass.fromEntity).toList())
);
});
}