send method

Future<List<ActionStateTuple<A, S>>> send(
  1. A action
)

Implementation

Future<List<ActionStateTuple<A, S>>> send(A action) async {
  List<ActionStateTuple<A, S>> actionStateTuples = [];

  final reducerTuple = _reducer.run(_state, action);
  _state = reducerTuple.state;
  actionStateTuples.add(ActionStateTuple(action, reducerTuple.state));

  await Future.forEach(reducerTuple.effectTasks, (effectTask) async {
    final optionalAction = await effectTask.run(_state, _environment, null);
    if (optionalAction != null) {
      final reducerTuple = _reducer.run(_state, optionalAction);
      _state = reducerTuple.state;
      actionStateTuples
          .add(ActionStateTuple(optionalAction, reducerTuple.state));
    }
  });

  return actionStateTuples;
}