run method
Runs operation and returns its result when this execution remains
current. A stale or disposed execution returns null; a current failed
operation records AsyncError and rethrows its error to the caller.
Implementation
Future<T?> run(Future<T> Function() operation) async {
final generation = ++_generation;
_ref.set(state, AsyncLoading<T>(state.value.valueOrNull));
try {
final value = await operation();
if (!_ref.isMounted || generation != _generation) return null;
_ref.set(state, AsyncData<T>(value));
return value;
} catch (error, stackTrace) {
if (!_ref.isMounted || generation != _generation) return null;
_ref.set(state, AsyncError<T>(error, stackTrace));
rethrow;
}
}