dispose method

  1. @nonVirtual
Resolvable<Unit> dispose({
  1. bool eagerError = false,
})

Drives the service into ServiceState.DISPOSE_SUCCESS by running listeners from provideDisposeListeners.

Contract:

  • Calling dispose a second time is a no-op Ok (idempotent).
  • Otherwise: listeners run; state transitions to DISPOSE_ATTEMPT then DISPOSE_SUCCESS / DISPOSE_ERROR.
  • Once disposed, init/pause/resume all resolve to Err (terminal).

Implementation

@nonVirtual
Resolvable<Unit> dispose({bool eagerError = false}) {
  return _sequencer.then((prev) {
    if (state.didDispose()) {
      return Sync<Option>.okValue(const None());
    }
    return _updateState(
      providerFunction: provideDisposeListeners,
      eagerError: eagerError,
      attemptState: ServiceState.DISPOSE_ATTEMPT,
      successState: ServiceState.DISPOSE_SUCCESS,
      errorState: ServiceState.DISPOSE_ERROR,
      phaseName: 'dispose',
    );
  }).toUnit();
}