toMultipartRequest method
Convert this Request to a http.MultipartRequest
Implementation
@visibleForTesting
Future<http.MultipartRequest> toMultipartRequest() async {
final http.MultipartRequest request = http.MultipartRequest(method, url)
..headers.addAll(headers);
for (final PartValue part in parts) {
if (part.value == null) continue;
if (part.value is http.MultipartFile) {
request.files.add(part.value);
} else if (part.value is Iterable<http.MultipartFile>) {
request.files.addAll(part.value);
} else if (part is PartValueFile) {
if (part.value is List<int>) {
request.files.add(
http.MultipartFile.fromBytes(part.name, part.value),
);
} else if (part.value is String) {
request.files.add(
await http.MultipartFile.fromPath(part.name, part.value),
);
} else {
throw ArgumentError(
'Type ${part.value.runtimeType} is not a supported type for PartFile. '
'Please use one of the following types:\n'
'- List<int>\n'
'- String (path of your file)\n'
'- MultipartFile (from package:http)',
);
}
} else if (part.value is Iterable) {
request.fields.addAll({
for (int i = 0; i < part.value.length; i++)
'${part.name}[$i]': part.value.elementAt(i).toString(),
});
} else {
request.fields[part.name] = part.value.toString();
}
}
return request;
}