fetchFuture<T> static method

Future<T> fetchFuture<T>(
  1. String key,
  2. Future<T> future(), {
  3. bool enableCache = true,
  4. bool enableBackgroundFetch = true,
})

Implementation

static Future<T> fetchFuture<T>(
  String key,
  Future<T> Function() future, {
  bool enableCache = true,
  bool enableBackgroundFetch = true,
}) async {
  if (enableCache && _cache.containsKey(key)) {
    final cachedData = retrieveData<T>(key);
    if (cachedData != null) {
      if (enableBackgroundFetch && !isFetching(key)) {
        _fetchFutureInBackground(key, future, enableCache);
      }
      return cachedData;
    }
  }

  try {
    final data = await future();
    if (enableCache) {
      store(key, data);
    }
    if (enableBackgroundFetch && !isFetching(key)) {
      _fetchFutureInBackground(key, future, enableCache);
    }
    return data;
  } catch (e) {
    rethrow;
  }
}