Flutter dio http封装、泛型json统一解析

首先集成dio本案例使用的是3.0.3版本

https://blog.youkuaiyun.com/qq_35364808/article/details/111829424

dio: ^3.0.3

首先贴出封装后的使用效果

ClassInfoListRQ classInfoListRQ = new ClassInfoListRQ();
classInfoListRQ.siteid = " ";
classInfoListRQ.res.siteId = " ";
HttpUtil.getInstance()
        // 前面泛型是返回json的类型List就用这个,其他就用HttpResponseEntity
        // 后面泛型是要解析的json模型
        .post<HttpResponseListEntity, ClassInfoListRS>(
             HttpUrlApi.API_Class_Info, classInfoListRQ,
             success: (response) {
                 List<ClassInfoListRS> data = response;
                 print("object   $data");
        },error: (err){
             ToastUtils.show("错误码:${err.code} ${err.error}");
        }
);

 

主要是几个类

HttpUtil、HttpResponEntity、HttpResponListEntity、EntityFactory

HttpUtil:主要是对dio的封装,head和body的解析等操作

HttpResponEntity:对象类型返回值的base类

HttpResponListEntity:集合类型返回值的base类

这里为什么要分成两个,是因为flutter没有反射,这块目前只想到通过不同对象来区分。

EntityFactory:里面是所有json类的fromJson方法的调用

重要的事情说三遍

使用的时候注意:每添加一个json类需要在EntityFactory方法添加调用fromJson方法!!!

使用的时候注意:每添加一个json类需要在EntityFactory方法添加调用fromJson方法!!!

使用的时候注意:每添加一个json类需要在EntityFactory方法添加调用fromJson方法!!!

 

不多说直接贴代码,大家根据自己的项目情况进行修改。

HttpUtil类


typedef HttpCallBack<P> = dynamic Function(P response);

enum HttpMethod { GET, POST, DELETE, PUT, PATCH }

///http 工具类
class HttpUtil {
  HttpMethod method;
  BaseOptions _options;
  Dio _dio;
  bool hasLoading;
  BuildContext context;
  static HttpUtil _instance;

  static HttpUtil getInstance() {
    if (_instance == null) {
      _instance = HttpUtil();
    }
    return _instance;
  }

  ///获取头部信息
  dynamic getHeader() async {
    String headerData =
        StorageManager.sharedPreferences.getString(Constants.NET_HEADER_DATA);
    if (headerData != null) {
      return json.decode(headerData);
    } else {
      return "";
    }
    return "";
  }

  get<T, G>(String url,
      {HttpCallBack success,
      HttpCallBack special,
      HttpCallBack error,
      bool hasLoading,
      BuildContext context}) async {
    _http<T, G>(HttpMethod.GET, url, null,
        success: success,
        special: special,
        error: error,
        h
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值