ReduxStore constructor

ReduxStore({
  1. List<ReduxBloc> blocs = const [],
  2. bool isDebug = false,
  3. bool isRecordTrace = true,
})

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);
  });
}