「这是我参与11月更文应战的第27天,活动详情检查:2021最后一次更文应战」
引入Dio
咱们能够在pub.dev网站上,找到dio
包的地址:Dio地址,其GitHub
中文简介地址为:Dio中文简介;
要想运用Dio
,咱们需求先在项目中引入dio
:
假如导入成功,咱们能够在此目录中看到dio
包及其版别信息:
Dio的运用
get
Dio
的运用很简单,只需求创立一个Dio
对象,即可直接发送网络恳求,如下代码:
sendDio() async {
// 创立Dio对象
final dio = Dio();
// 发送恳求
Response response = await dio.getUri(Uri.parse('http://rap2api.taobao.org/app/mock/293614/api/chat/list'));
// 回来数据
print(response.statusCode);
print(response.data.toString());
}
由于网络恳求是异步的,所以需求运用await
和async
,这样才干直接接纳恳求回来的对象;咱们来看一下打印结果:
假如get
恳求需求增加参数,可运用如下恳求方法:
Response response = await dio.get('http://rap2api.taobao.org/app/mock/293614/api/chat/list', queryParameters: {});
-
queryParameters
用来传递参数;
download
运用Dio
进行下载操作,需求调用dio
的download
办法,咱们来看一下其界说:
Future<Response> download(
String urlPath,
savePath, {
ProgressCallback? onReceiveProgress,
Map<String, dynamic>? queryParameters,
CancelToken? cancelToken,
bool deleteOnError = true,
String lengthHeader = Headers.contentLengthHeader,
data,
Options? options,
});
-
urlPath
:下载的文件地址; -
savePath
:文件下载之后的保存地址;
咱们先来下载一下腾讯讲堂
的mac版
试一下:
sendDio() async {
// 创立Dio对象
final dio = Dio();
// 发送恳求
var downloadUrl = 'https://edu-files-1251502357.cos.ap-shanghai.myqcloud.com/CourseTeacher_2.8.1.13_DailyBuild.dmg';
var savePath = '/Users/***********/Desktop/testDownload/腾讯讲堂.dmg';
dio.download(downloadUrl, savePath).then((value) => print(value)).whenComplete(() => print('下载完结'));
}
需求留意的是,咱们先将文件下载到电脑的桌面,当前桌面是没有testDownload
文件夹的,在下载的时分,其会自动创立这个文件夹;并且咱们需求在途径后边跟上文件的姓名;
咱们看一下最终的执行结果:
那么如何获取下载进度呢?
给download
中的onReceiveProgress
办法传递一个_downloadProgress
办法,能够在该办法中接纳下载的进度;
转换成百分比,咱们将_downloadProgress
办法修正如下:
_downloadProgress(int count, int total) {
if (total != -1) {
print((count / total * 100).toStringAsFixed(0)+'%');
}
}
运转结果:
在设置下载地址的时分,咱们也能够经过回调的方法,赋值一个下载地址给download
办法,代码如下:
咱们在这个当地,将下载地址换成了手机端的沙盒tmp
的文件夹,需求留意的是,这是个iOS
的沙盒目录;检查header
和savePath
的打印结果:
想要了解更多关于Dio
网络库的运用,请移步Dio中文文档;