download method
void
download({
- required String savePath,
- ProgressCallback? onReceiveProgress,
- Success? success,
- Failure? failure,
- Completed? completed,
下载文件
Implementation
void download({
required String savePath,
ProgressCallback? onReceiveProgress,
Success? success,
Failure? failure,
Completed? completed,
}) async {
if (!(await _checkNetWork())) {
return;
}
final url = _buildFinalUrl();
try {
_options?.method = _httpType.name;
if (_headers.isNotEmpty) {
_options?.headers = _headers;
}
if (_enableGlobalHeader) {
_options?.headers ??= {};
_options?.headers?.addAll(_rxNet.getHeaders());
}
// 准备请求体
dynamic requestBody = _rawBody;
if (_rawBody == null && _bodyParams.isNotEmpty) {
if (_bodyType == RequestBodyType.formData) {
requestBody = FormData.fromMap(_bodyParams);
} else if (_bodyType == RequestBodyType.json) {
requestBody = _bodyParams;
}
}
final response = await _rxNet.client!.download(
url,
savePath,
onReceiveProgress: (received, total) {
if (total != -1) {
onReceiveProgress?.call(received, total);
}
if (received >= total) {
success?.call(savePath, SourcesType.net);
}
},
queryParameters: _queryParams,
data: requestBody,
options: _options,
cancelToken: _cancelToken
);
onResponse?.call(response);
if (response.statusCode != 200) {
failure?.call(response.data);
}
} catch (e) {
failure?.call(e);
}
completed?.call();
}