effects method
Stream version of add(effect: )
.
Moment
holds state, oldState and event of that
moment. moments
is stream of moment when event happen.
This code:
...
.effects((moments) => moments
.asyncExpand((moment) async* {
if (moment.event == 520) {
yield 521;
}
})
);
will produce same result as this:
...
.add(effect: (state, oldState, event, dispatch) {
if (event == 520) {
dispatch(521);
}
},);
Implementation
System<State, Event> effects(
Stream<Event> Function(Stream<Moment<State, Event>> moments) effects
) => withContext<_Context<State, Event>>(
createContext: () => _Context(
StreamController(),
),
effect: (context, state, oldState, event, dispatch) {
if (event == null) {
final events = effects(context.moments.stream);
context.subscription = events.listen(dispatch.call);
}
context.moments.add(Moment(state, oldState, event));
},
dispose: (context) {
context.subscription?.cancel();
context.subscription = null;
context.moments.close();
},
);