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 url = basePath + path;

  final _body = (contentType == "application/x-www-form-urlencoded" ||
          files.isNotNullOrEmpty)
      ? FormData.fromMap({
          for (var f in files) f.name!: f.toMultipartFile(),
          ...formParams,
        })
      : serialize(body);

  try {
    final _resp = await dio.request<String>(url,
        data: _body,
        queryParameters: queryParams,
        options: Options(
          method: method!,
          contentType: contentType!,
          headers: headerParams,
        ));
    return ApiResponse(
        _resp.statusCode ?? 500, _resp.data?.toString() ?? 'Unknown error');
  } on DioError catch (e) {
    return ApiResponse(
      e.response?.statusCode ?? 500,
        e.response?.data?.toString() ?? e.message,);
  }
}