request method

Future<Map<String, dynamic>> request({
  1. required ApiMethod method,
  2. required String url,
  3. dynamic requestData,
  4. Map<String, dynamic>? headers,
  5. Map<String, dynamic>? queryParameters,
  6. bool useWithoutToken = false,
  7. bool cacheResponse = false,
  8. Duration cacheDuration = const Duration(minutes: 30),
  9. CancelToken? cancelToken,
  10. void onSendProgress(
    1. int,
    2. int
    )?,
  11. void onReceiveProgress(
    1. int,
    2. int
    )?,
})

Implementation

Future<Map<String, dynamic>> request({
  required ApiMethod method,
  required String url,
  dynamic requestData,
  Map<String, dynamic>? headers,
  Map<String, dynamic>? queryParameters,
  bool useWithoutToken = false,
  bool cacheResponse = false,
  Duration cacheDuration = const Duration(minutes: 30),
  CancelToken? cancelToken,
  void Function(int, int)? onSendProgress,
  void Function(int, int)? onReceiveProgress,
}) async {
  try {
    // Check cache first if enabled
    if (_enableCache && cacheResponse) {
      final cached = _cacheBox.get(url);
      if (cached != null) return cached;
    }

    // Make the request
    late Response response;
    final options = Options(
      headers: headers,
      extra: {'useWithoutToken': useWithoutToken},
    );

    switch (method) {
      case ApiMethod.get:
        response = await _dio.get(
          url,
          queryParameters: queryParameters,
          options: options,
          cancelToken: cancelToken,
          onReceiveProgress: onReceiveProgress,
        );
        break;
      case ApiMethod.post:
        response = await _dio.post(
          url,
          data: requestData,
          queryParameters: queryParameters,
          options: options,
          cancelToken: cancelToken,
          onSendProgress: onSendProgress,
        );
        break;
      case ApiMethod.put:
        response = await _dio.put(
          url,
          data: requestData,
          queryParameters: queryParameters,
          options: options,
          cancelToken: cancelToken,
          onSendProgress: onSendProgress,
        );
        break;
      case ApiMethod.patch:
        response = await _dio.patch(
          url,
          data: requestData,
          queryParameters: queryParameters,
          options: options,
          cancelToken: cancelToken,
          onSendProgress: onSendProgress,
        );
        break;
      case ApiMethod.delete:
        response = await _dio.delete(
          url,
          data: requestData,
          queryParameters: queryParameters,
          options: options,
          cancelToken: cancelToken,
        );
        break;
    }

    // Cache response if needed
    if (_enableCache && cacheResponse) {
      await _cacheBox.put(
        url,
        response.data,
      );
    }

    return response.data;
  } on DioException catch (e) {
    throw _handleDioError(e);
  }

}