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

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用 Flutter Dio 进行网络请求时,可以将其进行封装,以便于代码的复用和维护。以下是一个简单的 Flutter Dio 封装示例: ```dart import 'package:dio/dio.dart'; class HttpUtil { static HttpUtil instance; Dio dio; BaseOptions options; // 构造函数 HttpUtil() { options = BaseOptions( baseUrl: 'https://api.example.com/', // 接口地址 connectTimeout: 5000, // 连接超时时间 receiveTimeout: 3000, // 接收超时时间 headers: { 'Content-Type': 'application/json', // 设置请求头 }, ); dio = Dio(options); } // 单例模式 static HttpUtil getInstance() { if (instance == null) { instance = HttpUtil(); } return instance; } // GET 请求 Future<Map<String, dynamic>> get(String url, {Map<String, dynamic> params}) async { Response response; try { response = await dio.get(url, queryParameters: params); } on DioError catch (e) { return Future.error(e); } return response.data; } // POST 请求 Future<Map<String, dynamic>> post(String url, {Map<String, dynamic> params}) async { Response response; try { response = await dio.post(url, data: params); } on DioError catch (e) { return Future.error(e); } return response.data; } } ``` 在上述示例中,我们定义了一个 HttpUtil 类,其中包含了 Dio 实例的初始化、GET 和 POST 请求封装。我们可以通过 `HttpUtil.getInstance()` 获取 HttpUtil 的单例对象,然后通过调用 `get` 或 `post` 方法来发起网络请求。这样做的好处是可以将网络请求的相关设置和配置统一管理,方便后续的维护和扩展。同时,通过封装,也避免了在多个地方重复编写相同的代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

夏目艾拉

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

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

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

打赏作者

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

抵扣说明:

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

余额充值