upload method

Future<void> upload({
  1. required String endpoint,
  2. required List<MultipartFile> files,
  3. required dynamic onSuccess(
    1. Response
    )?,
  4. required dynamic onError(
    1. Response
    )?,
  5. required dynamic onException(
    1. dynamic
    )?,
  6. Map<String, dynamic>? fields,
  7. Map<String, String>? headers,
  8. Map<String, dynamic>? queryParams,
})

Implementation

Future<void> upload({
  required final String endpoint,
  required final List<MultipartFile> files,
  required final Function(Response)? onSuccess,
  required final Function(Response)? onError,
  required final Function(dynamic)? onException,
  final Map<String, dynamic>? fields,
  final Map<String, String>? headers,
  final Map<String, dynamic>? queryParams,
}) async {
  try {
    final MultipartRequest request = MultipartRequest("POST", _buildUri(endpoint, queryParams));

    request.headers.addAll(<String, String>{...defaultHeaders, ...?headers});

    if (fields != null) {
      request.fields.addAll(
        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 (response.statusCode >= 200 && response.statusCode < 300) {
      onSuccess?.call(response);
    } else {
      onError?.call(response);
    }
  } catch (e) {
    onException?.call(e);
  }
}