run method

Future<T?> run(
  1. Future<T> operation()
)

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;
  }
}