Flutter:使用流行三方网络请求框架Dio封装一个自己的HTTP工具类

前面的话

使用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方法与此类似

额外的
  1. dynamic关键字代表让Dart放宽类型检查,让其可以存任何类型数据,方便我们进行不同类型数据的网络请求
  2. Future 是Dart中的一个核心类,用于表示异步操作的结果。一个Future对象通常代表一个将来某个时刻会返回结果的计算或异步任务。
  3. Response是Dio库中定义的一个类,代表HTTP请求的响应

  4. 函数前面的async关键字表明这是一个异步函数。在函数内部,可以使用await关键字来等待异步操作的完成,比如await dio.post(...)