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

引入Dio

咱们能够在pub.dev网站上,找到dio包的地址:Dio地址,其GitHub中文简介地址为:Dio中文简介;

要想运用Dio,咱们需求先在项目中引入dio

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

假如导入成功,咱们能够在此目录中看到dio包及其版别信息:

Flutter(二十九)-网络框架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());
}

由于网络恳求是异步的,所以需求运用awaitasync,这样才干直接接纳恳求回来的对象;咱们来看一下打印结果:

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

假如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文件夹的,在下载的时分,其会自动创立这个文件夹;并且咱们需求在途径后边跟上文件的姓名;

咱们看一下最终的执行结果:

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

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

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

download中的onReceiveProgress办法传递一个_downloadProgress办法,能够在该办法中接纳下载的进度;

转换成百分比,咱们将_downloadProgress办法修正如下:

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

运转结果:

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

在设置下载地址的时分,咱们也能够经过回调的方法,赋值一个下载地址给download办法,代码如下:

Flutter(二十九)-网络框架Dio
咱们在这个当地,将下载地址换成了手机端的沙盒tmp的文件夹,需求留意的是,这是个iOS的沙盒目录;检查headersavePath的打印结果:

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

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