resume method
Transitions the service into ServiceState.RESUME_SUCCESS by running listeners from provideResumeListeners.
Contract mirrors pause:
NOT_INITIALIZED→ Err (call init first).didDispose→ Err (terminal state).- Already in a resumed state → no-op Ok (idempotent).
- Otherwise: listeners run; transitions to
RESUME_ATTEMPTthenRESUME_SUCCESS/RESUME_ERROR.
Implementation
@nonVirtual
Resolvable<Unit> resume({bool eagerError = false}) {
return _sequencer.then((prev) {
assert(
!state.didDispose(),
'$runtimeType.resume: cannot be called after dispose; state is $state.',
);
if (state.didDispose()) {
return Sync<Option>.err(
Err('resume: cannot be called after dispose; state is $state.'),
);
}
assert(
state != ServiceState.NOT_INITIALIZED,
'$runtimeType.resume: service has not been initialized. '
'Call init() first.',
);
if (state == ServiceState.NOT_INITIALIZED) {
return Sync<Option>.err(
Err('resume: service has not been initialized. '
'Call init() first.'),
);
}
if (state.didResume()) {
return Sync<Option>.okValue(const None());
}
return _updateState(
providerFunction: provideResumeListeners,
eagerError: eagerError,
attemptState: ServiceState.RESUME_ATTEMPT,
successState: ServiceState.RESUME_SUCCESS,
errorState: ServiceState.RESUME_ERROR,
phaseName: 'resume',
);
}).toUnit();
}