download<T> method
Future<Result<T> >
download<T>(
- String urlPath,
- dynamic savePath, {
- dynamic data,
- Map<
String, dynamic> ? queryParameters, - RestApiClientRequestOptions? options,
- ProgressCallback? onReceiveProgress,
- CancelToken? cancelToken,
- bool deleteOnError = true,
- String lengthHeader = Headers.contentLengthHeader,
- FutureOr<
T> onSuccess(- dynamic data
- FutureOr<
T> onError(- dynamic data
override
Downloads a file from the specified urlPath to savePath.
Parameters:
urlPath: The URL or path to download fromsavePath: Local file path or a callback function(Headers) => StringonReceiveProgress: Callback for tracking download progresscancelToken: Token to cancel the downloaddeleteOnError: Whether to delete the file if download fails (default: true)lengthHeader: Header to read content length from
Example:
final result = await client.download(
'/files/document.pdf',
'/path/to/save/document.pdf',
onReceiveProgress: (received, total) {
print('${(received / total * 100).toStringAsFixed(0)}%');
},
);
Implementation
@override
Future<Result<T>> download<T>(
String urlPath,
savePath, {
data,
Map<String, dynamic>? queryParameters,
RestApiClientRequestOptions? options,
ProgressCallback? onReceiveProgress,
CancelToken? cancelToken,
bool deleteOnError = true,
String lengthHeader = Headers.contentLengthHeader,
FutureOr<T> Function(dynamic data)? onSuccess,
FutureOr<T> Function(dynamic data)? onError,
}) async {
try {
final response = await _dio.download(
urlPath,
savePath,
queryParameters: queryParameters,
options: options?.toOptions(),
data: data,
onReceiveProgress: onReceiveProgress,
cancelToken: cancelToken,
deleteOnError: deleteOnError,
lengthHeader: lengthHeader,
);
return NetworkResult(
response: response,
data: await _resolveResult(response.data, onSuccess),
);
} on DioException catch (e) {
await exceptionHandler.handle(e, silent: options?.silentException);
return NetworkResult(
response: e.response,
exception: e,
statusCode: e.response?.statusCode,
statusMessage: e.response?.statusMessage,
);
} catch (e) {
debugPrint(e.toString());
return Result.error(exception: Exception(e.toString()));
}
}