run method

Future<T> run(
  1. String key,
  2. AsyncRequest<T> request, {
  3. bool forceRefresh = false,
})

Runs request, sharing an in-flight request for key.

Set forceRefresh to ignore a completed cached value. In-flight requests are always reused, including for forced refreshes.

Implementation

Future<T> run(
  String key,
  AsyncRequest<T> request, {
  bool forceRefresh = false,
}) {
  final inFlight = _inFlight[key];
  if (inFlight != null) {
    return inFlight.future;
  }

  final cached = _cache[key];
  if (!forceRefresh &&
      cached != null &&
      DateTime.now().difference(cached.createdAt) <= maxAge) {
    return Future<T>.value(cached.value);
  }

  final state = _InFlightRequest<T>();
  state.future = _execute(key, state, request);
  _inFlight[key] = state;
  return state.future;
}