send method

Future<APIResponse<T>> send()

Implementation

Future<APIResponse<T>> send() async {
  if (log) {
    dev.log("[StorageDatabase.StorageAPI] reqUrl: $type - $url");
    dev.log("[StorageDatabase.StorageAPI] reqHeaders: $headers");
    dev.log("[StorageDatabase.StorageAPI] reqData: ${jsonEncode(data)}");
    dev.log("[StorageDatabase.StorageAPI] reqFiles: ${files.length} file");
  }

  String responseBody = '';

  int statusCode = 400;

  try {
    Uri uri = Uri.parse(url);

    if (files.isNotEmpty) {
      http.MultipartRequest request = MultipartRequest(
        '$type',
        Uri.parse(url),
        onFilesUpload,
      );
      request.files.addAll(files);
      request.fields.addAll({
        for (String key in (data ?? {}).keys) key: data![key].toString(),
      });
      request.headers.addAll(headers);

      http.StreamedResponse res = await request.send();
      statusCode = res.statusCode;
      responseBody = await res.stream.bytesToString();
    } else {
      http.Response response;

      if (type.isPost) {
        response = await http.post(
          uri,
          headers: headers,
          body: jsonEncode(data),
        );
      } else if (type.isPut) {
        response = await http.put(
          uri,
          headers: headers,
          body: jsonEncode(data),
        );
      } else if (type.isPatch) {
        response = await http.patch(
          uri,
          headers: headers,
          body: jsonEncode(data),
          encoding: encoding,
        );
      } else if (type.isDelete) {
        response = await http.delete(
          uri,
          headers: headers,
          body: jsonEncode(data),
        );
      } else {
        response = await http.get(uri, headers: headers);
      }

      responseBody = response.body;
      statusCode = response.statusCode;
    }

    return APIResponse.fromResponse<T>(
      responseBody,
      statusCode,
      log: log,
      errorsField: errorsField,
    );
  } on SocketException {
    if (log) {
      dev.log(
        "[StorageDatabase.StorageAPI] reqError: No Internet Connection",
      );
    }

    return APIResponse<T>(false, "No Internet Connection", 503);
  } catch (e) {
    return APIResponse<T>(false, 'ExceptionError: $e', statusCode);
  }
}