request method

Future<Response> request(
  1. ApiHelperPathItem item, {
  2. String? token,
  3. String? contentType,
})

Implementation

Future<response_helper.Response> request(
  ApiHelperPathItem item, {
  String? token,
  String? contentType,
}) async {
  try {
    final finalToken = token ?? item.tokenOverride ?? _token;

    final headers = <String, dynamic>{};
    if (finalToken != null && finalToken.isNotEmpty) {
      headers["Authorization"] = "Bearer $finalToken";
    }
    if (contentType != null) {
      headers["Content-Type"] = contentType;
    }

    final options = headers.isNotEmpty ? Options(headers: headers) : null;

    final url = item.baseUrlOverride != null
        ? "${item.baseUrlOverride}${item.path}"
        : item.path;

    late Response response;

    switch (item.requestType) {
      case ApiHelperRequestType.get:
        response = await _dio.get(url,
            queryParameters: item.queryParameters, options: options);
        break;
      case ApiHelperRequestType.post:
        response = await _dio.post(url,
            data: item.data,
            queryParameters: item.queryParameters,
            options: options);
        break;
      case ApiHelperRequestType.put:
        response = await _dio.put(url,
            data: item.data,
            queryParameters: item.queryParameters,
            options: options);
        break;
      case ApiHelperRequestType.delete:
        response = await _dio.delete(url,
            data: item.data,
            queryParameters: item.queryParameters,
            options: options);
        break;
      case ApiHelperRequestType.patch:
        response = await _dio.patch(url,
            data: item.data,
            queryParameters: item.queryParameters,
            options: options);
        break;
      case ApiHelperRequestType.head:
        // TODO: Handle this case.
        break;
    }

    if (response.statusCode == null ||
        response.statusCode! < 200 ||
        response.statusCode! >= 300) {
      return response_helper.Response.error(
        "Status Code: ${response.statusCode}",
      );
    }

    return responseResolver != null
        ? responseResolver!(response.data)
        : response_helper.Response.success(response.data);
  } on DioException catch (e) {
    return response_helper.Response.error(e.message ?? "Dio error");
  } catch (e) {
    return response_helper.Response.error(e.toString());
  }
}