call method

Future<Response> call(
  1. String url, {
  2. MethodRequest method = MethodRequest.POST,
  3. dynamic request,
  4. Map<String, String>? header,
  5. String? token,
  6. bool useFormData = false,
})

Implementation

Future<Response> call(String url,
    {MethodRequest method = MethodRequest.POST,
    dynamic request,
    Map<String, String>? header,
    String? token,
    bool useFormData = false}) async {
  bool isOnline = await ConnectivityService.hasNetwork();
  if (isOnline != true) {
    Response response = Response(
      data: {
        "message": "Tidak terhubung ke jaringan",
      },
      statusCode: 00,
      requestOptions: RequestOptions(path: ''),
    );
    return response;
  }
  if (header != null) {
    _dio.options.headers = header;
  }
  if (token != null) {
    if (header != null) {
      header.addAll({'Authorization': token});
      _dio.options.headers = header;
    } else {
      _dio.options.headers = {
        'Accept': 'application/json',
        'Authorization': token,
      };
    }
    // if (method == MethodRequest.PUT) {
    //   _dio.options.headers = {
    //     'Accept': 'application/json',
    //     'Content-Type': 'application/x-www-form-urlencoded',
    //     'Authorization': 'Bearer $token',
    //   };
    // }
  }

  logSuccess('URL : ${_dio.options.baseUrl}$url');
  logSuccess('Method : $method');
  logSuccess("Header : ${_dio.options.headers}");
  logSuccess("Request : $request");

  MethodRequest? selectedMethod;
  try {
    Response response;
    switch (method) {
      case MethodRequest.GET:
        selectedMethod = method;
        response = await _dio.get(url, queryParameters: request);
        break;
      case MethodRequest.PUT:
        selectedMethod = method;
        response = await _dio.put(
          url,
          data: useFormData ? FormData.fromMap(request!) : request,
        );
        break;
      case MethodRequest.DELETE:
        selectedMethod = method;
        response = await _dio.delete(
          url,
          data: useFormData ? FormData.fromMap(request!) : request,
        );
        break;
      default:
        selectedMethod = MethodRequest.POST;
        response = await _dio.post(
          url,
          data: useFormData ? FormData.fromMap(request!) : request,
        );
    }
    logSuccess(
        'Success $selectedMethod $url: \nResponse : ${url.contains("rss") ? "rss feed response to long" : response.data}');
    return response;
  } on DioError catch (e) {
    logError('Error $selectedMethod $url: $e\nData: ${e.response?.data}');
    if (e.response?.data is Map) {
      if (!(e.response?.data as Map).containsKey("message")) {
        (e.response?.data as Map).addAll(<String, dynamic>{
          "message":
              "Terjadi kesalahan, silahkan coba dalam beberapa saat lagi.",
        });
      }

      return e.response!;
    } else {
      Response response = Response(
        data: {
          "message":
              "Terjadi kesalahan, silahkan coba dalam beberapa saat lagi.",
        },
        requestOptions: e.requestOptions,
        statusCode: e.response?.statusCode,
      );
      return response;
    }
  }
}