streamGeneric method

Future<HttpResponse<CloudflareResponse?>> streamGeneric({
  1. MultipartFile? multipartFile,
  2. String? url,
  3. ProgressCallback? onUploadProgress,
  4. CancelToken? cancelToken,
})

Implementation

Future<HttpResponse<CloudflareResponse?>> streamGeneric({
  MultipartFile? multipartFile,
  String? url,
  ProgressCallback? onUploadProgress,
  CancelToken? cancelToken,
}) async {
  assert(multipartFile != null || url != null);
  final dio = restAPI.dio;
  final baseUrl = '${dio.options.baseUrl}/accounts/$accountId/stream';
  RequestOptions setStreamType<T>(RequestOptions requestOptions) {
    if (T != dynamic &&
        !(requestOptions.responseType == ResponseType.bytes ||
            requestOptions.responseType == ResponseType.stream)) {
      if (T == String) {
        requestOptions.responseType = ResponseType.plain;
      } else {
        requestOptions.responseType = ResponseType.json;
      }
    }
    return requestOptions;
  }

  const extra = <String, dynamic>{};
  final queryParameters = <String, dynamic>{};
  queryParameters.removeWhere((k, v) => v == null);
  final headers = <String, dynamic>{};
  final data = FormData();
  if (multipartFile != null) {
    data.files.add(MapEntry(
      'file',
      multipartFile,
    ));
  }
  if (url != null) {
    data.fields.add(MapEntry(
      'url',
      url,
    ));
  }
  final result = await dio.fetch<Map<String, dynamic>?>(
      setStreamType<HttpResponse<CloudflareResponse>>(Options(
    method: 'POST',
    headers: headers,
    extra: extra,
    contentType: 'multipart/form-data',
  )
          .compose(
            dio.options,
            '',
            queryParameters: queryParameters,
            data: data,
            cancelToken: cancelToken,
            onSendProgress: onUploadProgress,
          )
          .copyWith(baseUrl: baseUrl)));
  final value =
      result.data == null ? null : CloudflareResponse.fromJson(result.data!);
  final httpResponse = HttpResponse(value, result);
  return httpResponse;
}