uploadFile method
Implementation
Future<RxResult<T>> uploadFile({
adapter.ProgressCallback? onSendProgress,
}) async {
if (!(await _checkNetWork())) {
return RxResult.error(NetworkException("Network not available"));
}
final url = _buildFinalUrl();
final payload = _resolveRequestPayload();
try {
final adapterRequest = _buildAdapterRequest(
url: url,
queryParams: payload.queryParams,
data: payload.body,
contentType: payload.contentType,
);
final adapter = _requireAdapter();
final response = await adapter.upload(
adapterRequest,
onProgress: onSendProgress,
);
onResponse?.call(response);
if (response.isSuccess) {
T data;
if (_jsonTransformation != null) {
data = await _jsonTransformation!.call(response.data) as T;
} else {
data = response.data as T;
}
return RxResult(value: data, model: SourcesType.net);
} else {
throw NetworkException(
"Upload failed with status code ${response.statusCode}", null);
}
} on AdapterException catch (e) {
if (e.type == AdapterExceptionType.cancel) {
throw CancellationException("Upload was cancelled", e);
}
throw NetworkException(e.message, e);
} catch (e) {
if (e is RxError) rethrow;
throw NetworkException("Upload failed: $e", e);
}
}