toMultipartRequest method

  1. @visibleForTesting
Future<MultipartRequest> toMultipartRequest()

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;
}