getCached<T> method

Future<Response<T>> getCached<T>(
  1. String url, {
  2. Map<String, String>? headers,
  3. String? contentType,
  4. Map<String, dynamic>? query,
  5. Decoder<T>? decoder,
  6. bool useCache = true,
})

Enhanced GET with caching and retry

Implementation

Future<Response<T>> getCached<T>(
  String url, {
  Map<String, String>? headers,
  String? contentType,
  Map<String, dynamic>? query,
  Decoder<T>? decoder,
  bool useCache = true,
}) async {
  _checkIfDisposed();

  if (useCache && enableCaching) {
    final cacheKey = _generateCacheKey(url, query);
    final cached = _getCachedResponse<T>(cacheKey);
    if (cached != null) {
      if (enableLogging) {
        debugPrint('Cache hit for: $cacheKey');
      }
      return cached.response;
    }
  }

  final response = enableRetry
      ? await _retryRequest(
          () => httpClient.get<T>(
            url,
            headers: headers,
            contentType: contentType,
            query: query,
            decoder: decoder,
          ),
        )
      : await httpClient.get<T>(
          url,
          headers: headers,
          contentType: contentType,
          query: query,
          decoder: decoder,
        );

  if (useCache && enableCaching && response.isOk) {
    final cacheKey = _generateCacheKey(url, query);
    _cacheResponse(cacheKey, response);
    if (enableLogging) {
      debugPrint('Cached response for: $cacheKey');
    }
  }

  return response;
}