multipartRequest static method
Implementation
static Future<ApiCallResponse> multipartRequest(
ApiCallType? type,
String apiUrl,
Map<String, dynamic> headers,
Map<String, dynamic> params,
bool returnBody,
bool decodeUtf8,
) async {
assert({ApiCallType.POST, ApiCallType.PUT, ApiCallType.PATCH}.contains(type), 'Invalid ApiCallType $type for request with body');
isFile(e) => e is FFUploadedFile || (!kIsWeb && e is File) || e is List<FFUploadedFile> || (e is List && e.firstOrNull is FFUploadedFile);
final nonFileParams = Map.fromEntries(params.entries.where((e) => !isFile(e.value)));
List<http.MultipartFile> files = [];
params.entries.where((e) => isFile(e.value)).forEach((e) {
final param = e.value;
final uploadedFiles = param is List ? param as List<FFUploadedFile> : [param as FFUploadedFile];
for (var uploadedFile in uploadedFiles) {
files.add(
http.MultipartFile.fromBytes(
e.key,
uploadedFile.clMedia.file?.bytes ?? Uint8List.fromList([]),
filename: uploadedFile.clMedia.file?.name,
contentType: _getMediaType(uploadedFile.clMedia.file?.name),
),
);
}
});
final request =
http.MultipartRequest(type.toString().split('.').last, Uri.parse(apiUrl))
..headers.addAll(toStringMap(headers))
..files.addAll(files);
nonFileParams.forEach((key, value) => request.fields[key] = value.toString());
final streamed = await request.send().timeout(_effectiveTimeout);
final response = await http.Response.fromStream(streamed);
return ApiCallResponse.fromHttpResponse(response, returnBody, decodeUtf8);
}