streamGeneric method
Future<HttpResponse<CloudflareResponse?> >
streamGeneric({
- MultipartFile? multipartFile,
- String? url,
- ProgressCallback? onUploadProgress,
- 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;
}