前言
前面介绍了dart语言自带的网络请求库httpClient,以及官方推荐的网络请求库http,但我们的网络请求其实千变万化,并不仅仅只是请求一个网页获取某种数据这一种需求。
有时候,我们也需要在网络请求之前以及之后做些准备工作,这就涉及到如果监听我们的网络请求过程,这个时候前面的网络请求方式显然不能满足我们的需求,所以我们需要借助强大的第三方网路请求库dio。
dio库是Flutter中文网提供的一个强大的http请求库,在Github上它的star数量已经超过3000次,如果你用Java开发过Android程序,肯定用到过OkHttp库,其实它们两有些相似。它支持文件的上传/下载,Cookie管理,FormData,请求/取消,拦截器等操作。下面博主将详细介绍dio库的用法。
基本用法
通过在网络请求中,基本用法如前面一样就是get与post请求。比如通过get请求获取一个网址的内容,可以通过如下代码实现:
_getData() async{
try{
Response response=await Dio().get("https://www.baidu.com/");
print(response);
}catch(e){
print(e);
}
代码很简单这里就不做过多的赘述,接着我们再来看看post请求,代码如下:
_postData() async{
try{
Response response=await Dio().post("https://www.baidu.com/",data: {
});
print(response);
}catch(e){
print(e);
}
}
与get请求唯一的区别是多了一个参数传递,通过键值对的方式。
dio单例
一个dio实例可以发起多个网络请求。很多时候,在App里只存在一个http数据源,且有一些公共的配置项,比如公共的头文件,公共的请求地址,超时设置等。在这些情况下,我们可以考虑使用dio库提供的单例模式,这也是dio库推荐的用法,便于程序员管理,创建的代码如下:
var dio=new Dio(new BaseOptions(
baseUrl: "http://liyuanjinglyj.com/demo",//链接
connectTimeout: 5000,//链接超时
receiveTimeout: 100000,//响应超时
headers: {
//请求头
HttpHeaders.userAgentHeader:"dio",
"api": "1.0.0",
},