ReduxStore constructor
Implementation
ReduxStore({
List<ReduxBloc<dynamic, dynamic>> blocs = const [],
this.isDebug = false,
this.isRecordTrace = true,
}) : _blocs = blocs,
states = BehaviorSubject.seeded(buildState(blocs)) {
var dispatchStream = _dispatchController.stream.asBroadcastStream();
var afterwareStream = _afterwareController.stream.asBroadcastStream();
for (final ReduxBloc<dynamic, dynamic> bloc in blocs) {
dispatchStream = bloc.applyMiddleware(dispatchStream);
afterwareStream = bloc.applyAfterware(afterwareStream);
}
var reducerStream = dispatchStream.map<Accumulator>((context) => Accumulator(context.action, states.value));
for (final ReduxBloc<dynamic, dynamic> bloc in blocs) {
reducerStream = bloc.applyReducer(reducerStream);
}
reducerStream.listen((a) {
states.add(a.state);
_afterwareController.add(WareContext(dispatch, a.state, a.action));
});
afterwareStream.listen((context) {
_actionController.add(context.action);
});
}