send method

Future<Response> send({
  1. required RequestMethod reqMethod,
  2. required String path,
  3. dynamic onSendProgress(
    1. int count,
    2. int total
    )?,
  4. dynamic onReceiveProgress(
    1. int count,
    2. int total
    )?,
  5. CancelToken? cancelToken,
  6. Map<String, dynamic> body = const <String, dynamic>{},
  7. Map<String, dynamic> query = const <String, dynamic>{},
  8. String? saveDirPath,
})

send any type of request GET POST PUT PATCH DELETE DOWNLOAD

Implementation

Future<Response> send(
    {required RequestMethod reqMethod,
    required String path,
    Function(int count, int total)? onSendProgress,
    Function(int count, int total)? onReceiveProgress,
    CancelToken? cancelToken,
    Map<String, dynamic> body = const <String, dynamic>{},
    Map<String, dynamic> query = const <String, dynamic>{},
    String? saveDirPath}) async {
  late Response res;

  final nextBody = {}..addAll(body);
  final nextQuery = {}..addAll(query);

  try {
    switch (reqMethod) {
      case RequestMethod.get:
        res = await _dio.get(
          path,
          cancelToken: cancelToken,
          queryParameters: nextQuery.cast(),
        );
        break;
      case RequestMethod.post:
        res = await _dio.post(
          path,
          data: nextBody.cast(),
          onReceiveProgress: onReceiveProgress,
          onSendProgress: onSendProgress,
          cancelToken: cancelToken,
          queryParameters: nextQuery.cast(),
        );
        break;
      case RequestMethod.put:
        res = await _dio.put(
          path,
          data: nextBody.cast(),
          onSendProgress: onSendProgress,
          onReceiveProgress: onReceiveProgress,
          cancelToken: cancelToken,
          queryParameters: nextQuery.cast(),
        );
        break;
      case RequestMethod.patch:
        res = await _dio.patch(
          path,
          data: nextBody.cast(),
          onSendProgress: onSendProgress,
          onReceiveProgress: onReceiveProgress,
          cancelToken: cancelToken,
          queryParameters: nextQuery.cast(),
        );
        break;
      case RequestMethod.delete:
        res = await _dio.delete(
          path,
          data: nextBody.cast(),
          cancelToken: cancelToken,
          queryParameters: nextQuery.cast(),
        );
        break;

      case RequestMethod.download:
        res = await _dio.download(
          path,
          saveDirPath,
          cancelToken: cancelToken,
          onReceiveProgress: onReceiveProgress,
          queryParameters: nextQuery.cast(),
        );

        break;
      default:
        throw ("reqMethod Not available ! ");
    }

    _throwIfNoSuccess(res);

    return res;
  } on DioException catch (err) {
    if (err.type == DioExceptionType.unknown ||
        err.type == DioExceptionType.connectionTimeout ||
        err.type == DioExceptionType.receiveTimeout ||
        err.type == DioExceptionType.sendTimeout) {
      throw CustomDioException(err.message, err.response?.statusCode ?? 5000);
    }
    rethrow;
  } finally {
    _dio.close();
  }
}