invokeAPI method

Future<ApiResponse> invokeAPI(
  1. String path,
  2. String? method,
  3. QueryParams queryParams,
  4. Iterable<PFile> files,
  5. Object? body,
  6. Map<String, String?> headerParams,
  7. Map<String, String> formParams,
  8. String? contentType, {
  9. String? basePath,
})
override

Implementation

Future<ApiResponse> invokeAPI(
    String path,
    String? method,
    QueryParams queryParams,
    Iterable<PFile> files,
    Object? body,
    Map<String, String?> headerParams,
    Map<String, String> formParams,
    String? contentType,
    {String? basePath}) async {
  basePath ??= this.basePath;

  String queryString = queryParams.isNotEmpty
      ? '?' +
          queryParams.flattened().map((e) => "${e.key}=${e.value}").join('&')
      : '';

  String url = basePath + path + queryString;
  headerParams['Content-Type'] = contentType;
  Response response;
  if (body is MultipartRequest) {
    var request = MultipartRequest(method!, Uri.parse(url));
    request.fields.addAll(body.fields);
    request.files.addAll(body.files);
    request.headers.addAll(body.headers);
    request.headers.addAll(headerParams as Map<String, String>);
    var streamedResp = await client.send(request);
    response = await Response.fromStream(streamedResp);
  } else {
    var msgBody = contentType == "application/x-www-form-urlencoded"
        ? formParams
        : serialize(body);

    final doRequest = () async {
      switch (method) {
        case "POST":
          return client.post(url.toUri()!,
              headers: headerParams as Map<String, String>?, body: msgBody);
        case "PUT":
          return client.put(url.toUri()!,
              headers: headerParams as Map<String, String>?, body: msgBody);
        case "DELETE":
          return client.delete(url.toUri()!,
              headers: headerParams as Map<String, String>?);
        case "PATCH":
          return client.patch(url.toUri()!,
              headers: headerParams as Map<String, String>?, body: msgBody);

        default:
          return client.get(url.toUri()!,
              headers: headerParams as Map<String, String>?);
      }
    };
    response = await doRequest();
  }
  // if (response.statusCode >= 400) {
  //   throw ApiException.response(response.statusCode, response.body,
  //       builder: RequestBuilder()
  //         ..basePath = basePath
  //         ..path = path);
  // } else {
  return ApiResponse(response.statusCode, response.body);
  // }
}