download method
下载文件
url下载地址 当isExternalUrl为true,传完整下载路径;isExternalUrl为false,传相对路径
savePath存储路径
isExternalUrl 是否为外部地址(默认false);
onSuccess请求成功回调
onError请求失败回调
onProgress请求过程回调(百分比 0~100)
onStart发起请求前回调
onFinish请求完成回调(不论请求失败与否)
Implementation
Future download({
required String url,
required String savePath,
bool isExternalUrl = false,
required Function(String) onSuccess,
Function(ErrorEntity)? onError,
Function(int)? onProgress,
Function()? onStart,
Function()? onFinish,
}) async {
String downloadUrl = "";
if (isExternalUrl) {
downloadUrl = url;
} else {
String host = DomainManager().getDomain(DomainType.fileDownload);
downloadUrl = host + url;
}
onStart?.call();
try {
_logDownload("下载路径 $savePath");
await _dio!.download(downloadUrl, savePath,
// disable gzip
options: Options(
headers: {HttpHeaders.acceptEncodingHeader: "*"},
receiveTimeout: defHttpTimeoutLong,
sendTimeout: defHttpTimeoutLong,
), onReceiveProgress: (received, total) {
if (total != -1) {
int percent = received * 100 ~/ total;
// _logDownload("下载进度 $percent");
onProgress?.call(percent);
if (percent >= 100) {
_logDownload("下载完成 $savePath");
onSuccess.call(savePath);
}
}
});
} on DioError catch (e) {
_logDownload("下载失败 $e");
onError?.call(ErrorEntity(code: -10, message: Strings.httpDownloadFailed.tr));
} on Exception catch (e) {
_logDownload("下载失败 $e");
onError?.call(ErrorEntity(code: -10, message: Strings.httpDownloadFailed.tr));
} finally {
onFinish?.call();
}
}