Flutter(二十九)-网络框架Dio

「这是我参与11月更文挑战的第27天,活动详情查看:2021最后一次更文挑战

引入Dio

我们可以在pub.dev网站上,找到dio包的地址:Dio地址,其GitHub中文简介地址为:Dio中文简介

要想使用Dio,我们需要先在项目中引入dio

image.png

如果导入成功,我们可以在此目录中看到dio包及其版本信息:

image.png

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());
}
复制代码

因为网络请求是异步的,所以需要使用awaitasync,这样才能直接接收请求返回的对象;我们来看一下打印结果:

image.png

如果get请求需要添加参数,可使用如下请求方式:

Response response = await dio.get('http://rap2api.taobao.org/app/mock/293614/api/chat/list', queryParameters: {});
复制代码
  • queryParameters用来传递参数;

download

使用Dio进行下载操作,需要调用diodownload方法,我们来看一下其定义:

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文件夹的,在下载的时候,其会自动创建这个文件夹;并且我们需要在路径后边跟上文件的名字;

我们看一下最终的执行结果: image.png

那么如何获取下载进度呢?

image.png

download中的onReceiveProgress方法传递一个_downloadProgress方法,可以在该方法中接收下载的进度;

转换成百分比,我们将_downloadProgress方法修改如下:

_downloadProgress(int count, int total) {
  if (total != -1) {
    print((count / total * 100).toStringAsFixed(0)+'%');
  }
}
复制代码

运行结果:

image.png

在设置下载地址的时候,我们也可以通过回调的方式,赋值一个下载地址给download方法,代码如下:

image.png 我们在这个地方,将下载地址换成了手机端的沙盒tmp的文件夹,需要注意的是,这是个iOS的沙盒目录;查看headersavePath的打印结果:

image.png

想要了解更多关于Dio网络库的使用,请移步Dio中文文档

猜你喜欢

转载自juejin.im/post/7035072275976028174