<>dio

dio是一个强大的Dart Http请求库,支持Restful API、FormData、拦截器、请求取消、Cookie管理、文件上传/下载、超时等…

我们的网络请求就是在dio的基础上封装的 . 所以要引入dio包.

<>添加依赖
dependencies: dio: ^x.x.x // 请使用pub上的最新版本
<>HttpUtil
/* * Created by 李卓原 on 2018/9/15. * email: [email protected] * 网络请求封装 */
import 'package:dio/dio.dart'; class HttpUtil { static HttpUtil instance; Dio
dio; Options options; static HttpUtil getInstance() { print('getInstance'); if
(instance == null) { instance = new HttpUtil(); } return instance; } HttpUtil()
{ print('dio赋值'); // 或者通过传递一个 `options`来创建dio实例 options = Options( //
请求基地址,可以包含子路径,如: "https://www.google.com/api/". baseUrl:
"https://www.xx.com/api", //连接服务器超时时间,单位是毫秒. connectTimeout: 10000, ///
响应流上前后两次接受到数据的间隔,单位为毫秒。如果两次间隔超过[receiveTimeout], /// [Dio]
将会抛出一个[DioErrorType.RECEIVE_TIMEOUT]的异常. /// 注意: 这并不是接收数据的总时限. receiveTimeout:
3000, headers: {}, ); dio = new Dio(options); } get(url, {data, options,
cancelToken}) async { print('get请求启动! url:$url ,body: $data'); Response
response; try { response = await dio.get( url, data: data, cancelToken:
cancelToken, ); print('get请求成功!response.data:${response.data}'); } on DioError
catch (e) { if (CancelToken.isCancel(e)) { print('get请求取消! ' + e.message); }
print('get请求发生错误:$e'); } return response.data; } post(url, {data, options,
cancelToken}) async { print('post请求启动! url:$url ,body: $data'); Response
response; try { response = await dio.post( url, data: data, cancelToken:
cancelToken, ); print('post请求成功!response.data:${response.data}'); } on DioError
catch (e) { if (CancelToken.isCancel(e)) { print('post请求取消! ' + e.message); }
print('post请求发生错误:$e'); } return response.data; } }
<>使用

import ‘package:flutter_oschina/utils/HttpUtil.dart’;
Future getData() async { String url = Api.NEWS_LIST; var data = {'pageIndex':
1, 'pageSize': 10}; var response = await HttpUtil().get(url, data: data);
setState(() { ... }); }
<>更新:

本文写的时候是在dio1.x版本,现在已更新到2.x版本, Options中的baseUrl从Options移到了BaseOptions , 请查看下面的内容

<>Options

Options对象包含了对网络请求的配置,在1.x中无论是实例配置还是单次请求的配置都使用的是Options
对象,这样会带来一些二义性,甚至有时会让开发者感到疑惑,比如Options.baseUrl
属性代表请求基地址,理论上它只应该在实例配置中设置,而不应该出现在每次请求的配置中;再比如Options.path
属性,它代表请求的相对路径,不应该在实例请求配置中。2.1中将请求配置分拆成三个类:

| 类名 | 作用 |

| -------------- | ----------------------------------------------- |

| BaseOptions | Dio实例基配置,默认对该dio实例的所有请求生效 |

| Options | 单次请求配置,可以覆盖BaseOptions中的同名属性 |

| RequestOptions | 请求的最终配置,是对Option和BaseOptions合并后的 |

另外,添加了一些新的配置项:

*
cookies:可以添加一些公共cookie

*
receiveDataWhenStatusError:当响应状态码不是成功状态(如404)时,是否接收响应内容,如果是false,则response.data
将会为null

*
maxRedirects: 重定向最大次数。