shareForever method

System<State, Event> shareForever()

Share same source of truth using strategy forever.

If system.run has been called multiple time, this operator will make them share same source of truth. The source system will be running forever after first run get called, Which means even all running system's has been disposed, The source system will not be disposed either.

It's useful for some global shared system, like appSystem.

Implementation

System<State, Event> shareForever() => copy((run) {
  final forwarder = EffectForwarder<State, Event>();
  bool running = false;
  return ({reduce, effect, interceptor}) {
    assert(reduce == null, 'downward `reduce` is not null in share context.');
    assert(interceptor == null, 'downward `interceptor` is not null in share context.');

    final nextEffect = effect ?? (_, __, ___, ____) {};
    final Disposer disposer = forwarder.add(effect: nextEffect);

    if (!running) {
      running = true;
      run(effect: forwarder.effect);
    }

    return disposer;
  };
});