upload static method
Future<void>
upload({
- required String endpoint,
- required List<
MultipartFile> files, - required dynamic onSuccess()?,
- required dynamic onError()?,
- required VoidCallback onException,
- Map<
String, dynamic> ? fields, - Map<
String, String> ? headers, - Map<
String, dynamic> ? queryParams, - String method = "POST",
- Duration timeout = const Duration(minutes: 5),
- void onProgress(
- int percent
Implementation
static Future<void> upload({
required String endpoint,
required List<MultipartFile> files,
required Function(Response)? onSuccess,
required Function(Response)? onError,
required VoidCallback onException,
Map<String, dynamic>? fields,
Map<String, String>? headers,
Map<String, dynamic>? queryParams,
String method = "POST",
Duration timeout = const Duration(minutes: 5),
void Function(int percent)? onProgress,
}) async {
int lastPercent = -1;
void report(int percent) {
if (onProgress == null) return;
final int p = percent.clamp(0, 100).toInt();
if (p <= lastPercent) return;
lastPercent = p;
onProgress(p);
}
try {
final MultipartRequest request = onProgress == null ? MultipartRequest(method, _buildUri(endpoint, queryParams)) : _UProgressMultipartRequest(method, _buildUri(endpoint, queryParams), report);
request.headers.addAll(<String, String>{...?headers});
if (fields != null) request.fields.addAll(removeNullEntries(fields)!.map((String key, dynamic value) => MapEntry<String, String>(key, value is String ? value : jsonEncode(value))));
request.files.addAll(files);
final Response response = await request.send().timeout(timeout).then(Response.fromStream);
if (kDebugMode) response.prettyLog(params: jsonEncode(fields));
if (response.statusCode >= 200 && response.statusCode < 300) {
onSuccess?.call(response);
} else {
onError?.call(response);
}
} catch (e, stack) {
onException();
developer.log(e.toString(), stackTrace: stack);
}
}