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