send method
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);
}
}