sendMultipartRequest static method
Future<StreamedResponse?>
sendMultipartRequest(
{ - required String requestId,
- required RequestType requestType,
- required String url,
- String token = '',
- Map<String, dynamic>? fields,
- Map<String, String>? head,
- Map<String, List<File>>? filesMap,
})
Implementation
static Future<http.StreamedResponse?> sendMultipartRequest({
required String requestId,
required RequestType requestType,
required String url,
String token = '',
Map<String, dynamic>? fields,
Map<String, String>? head,
Map<String, List<File>>? filesMap, // 👈 dynamic file groups
}) async {
try {
var uri = Uri.parse(url);
var request = http.MultipartRequest(
requestType == RequestType.post ? 'POST' : 'PUT',
uri,
);
final client = http.Client();
_activeClients[requestId] = client;
request.headers.addAll(head ?? _getHeaders(token, 'multipart/form-data'));
// Add fields
fields?.forEach((key, value) {
request.fields[key] = value.toString();
});
// Add multiple files per field
if (filesMap != null) {
for (var entry in filesMap.entries) {
final fieldName = entry.key;
final files = entry.value;
for (var file in files) {
request.files.add(
await http.MultipartFile.fromPath(fieldName, file.path),
);
}
}
}
final streamedResponse = await client
.send(request)
.timeout(
const Duration(seconds: 120),
onTimeout: () => throw "Request Timeout",
);
_activeClients.remove(requestId);
return streamedResponse;
} on SocketException {
throw "No internet connection.";
} on TimeoutException {
throw "Request Timeout";
} on HandshakeException {
throw "Connection terminated during handshake";
} catch (e) {
throw e.toString();
}
}