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

本文介绍了如何在Dio库中实现全局单例以优化性能,包括BaseOptions配置、请求拦截器的使用以及在开发和生产环境下的不同设置。还讨论了动态类型、Future和Response在异步请求中的作用。
摘要由CSDN通过智能技术生成

前面的话

使用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(...)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏目艾拉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值