首先集成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