request<T> method

Future<T> request<T>(
  1. Future<T> requestFn(), {
  2. String? cacheKey,
  3. NetworkStrategy? strategy,
  4. Duration? cacheTtl,
  5. RetryPolicy? retryPolicy,
  6. bool queueIfOffline = true,
})

Execute a network request with strategy-based resolution.

  • requestFn — the async closure that performs the actual work.
  • cacheKey — optional key for caching the result.
  • strategy — how to resolve the request (defaults to config default).
  • cacheTtl — per-request TTL override.
  • retryPolicy — per-request retry override.
  • queueIfOffline — whether to enqueue when offline (default true).

Implementation

Future<T> request<T>(
  Future<T> Function() requestFn, {
  String? cacheKey,
  NetworkStrategy? strategy,
  Duration? cacheTtl,
  RetryPolicy? retryPolicy,
  bool queueIfOffline = true,
}) async {
  final effectiveStrategy = strategy ?? _config.defaultStrategy;

  _logger.debug(
    'NetworkManager: request(strategy: $effectiveStrategy, '
    'cacheKey: $cacheKey)',
  );

  return switch (effectiveStrategy) {
    NetworkFirst() => _networkFirst<T>(
        requestFn,
        cacheKey: cacheKey,
        cacheTtl: cacheTtl,
        retryPolicy: retryPolicy,
        queueIfOffline: queueIfOffline,
      ),
    CacheFirst() => _cacheFirst<T>(
        requestFn,
        cacheKey: cacheKey,
        cacheTtl: cacheTtl,
        retryPolicy: retryPolicy,
        queueIfOffline: queueIfOffline,
      ),
    CacheOnly() => _cacheOnly<T>(cacheKey),
    NetworkOnly() => _networkOnly<T>(
        requestFn,
        retryPolicy: retryPolicy,
        queueIfOffline: queueIfOffline,
        cacheKey: cacheKey,
      ),
  };
}