前面的话
使用Dio前不要忘了在pubspec.yaml引入Dio包
代码部分
类基本定义
class HttpUtil { static Dio? _dio; }
性能优化:确保全局只有一个dio实例
为了优化性能,确保只有一个dio实例,我们需要做一些封装
static Dio get dio { if (_dio == null) { BaseOptions options = BaseOptions( baseUrl: baseUrl, // API地址 connectTimeout: const Duration(milliseconds: 5000), // 设置连接超时时间为5秒 receiveTimeout: const Duration(milliseconds: 5000), // 设置接收数据超时时间为5秒 ); _dio = Dio(options); } return _dio!; }
这样每次使用dio实例时,调用get方法,执行相关逻辑就可以确保只有一个dio实例存在
BaseOptions定义了一些基础的信息
添加请求拦截器打印请求信息方便调试
dio还有很多可以自己添加配置的强大功能,
这里真实开发请求拦截器
至于kDebugMode是怎么被正确设置来判断我们是否处于开发模式的,查看源码
看来是以打包的方式,release 还是 profile(性能分析模式)
同样的,我们可以定义respone时候的请求拦截,打印输出response内容
还有当请求失败时候的拦截器,不在此赘述
封装请求
需要注意的是,方法均需要设置为静态的,来在类外直接调用
post方法与此类似
额外的
- dynamic关键字代表让Dart放宽类型检查,让其可以存任何类型数据,方便我们进行不同类型数据的网络请求
Future 是Dart中的一个核心类,用于表示异步操作的结果。一个Future 对象通常代表一个将来某个时刻会返回结果的计算或异步任务。-
Response 是Dio库中定义的一个类,代表HTTP请求的响应 -
函数前面的
async 关键字表明这是一个异步函数。在函数内部,可以使用await 关键字来等待异步操作的完成,比如await dio.post(...)