internalDispatch method Null safety

  1. @override
Future<TResult> internalDispatch(
  1. Dispatcher dispatcher
)
override

Implementation

@override
Future<TResult> internalDispatch(Dispatcher dispatcher) {
  onDispatch();
  final completer = Completer<TResult>();
  final invoker = rules.reversed.fold<VoidCallback>(
    () {
      if (dispatcher.cancelled) return;
      body().then((value) {
        if (dispatcher.cancelled) return;
        completer.complete(value);
        dispatcher.onDone(null, value);
      }, onError: (error) {
        if (dispatcher.cancelled) return;
        completer.completeError(error);
        dispatcher.onDone(error, null);
      });
    },
    (next, m) => () {
      if (dispatcher.cancelled) return;
      m(dispatcher, next);
    },
  );
  cubix.bindDispatcher(dispatcher);
  invoker();
  return completer.future;
}