Dio网络库的使用与封装

  • 导入依赖
  • 定义变量
  • 创建Dio对象
  • 封装Get和Post请求
  • 网络请求
  • 释放dio对象
  • 封装类
  • 解析
  • 使用

导入依赖

 #网络库dio: ^4.0.0

定义变量

// default optionsstatic const int _connectTimeout = 15000; //15sstatic const int _receiveTimeout = 15000;static const int _sendTimeout = 10000;static const String GET = 'get';static const String POST = 'post';static const String PUT = 'put';static const String PATCH = 'patch';static const String DELETE = 'delete';static var _dio;static HttpUtil? _httpUtil;static HttpUtil getInstance() => _httpUtil ??= HttpUtil();

创建Dio对象

 // 创建 dio 实例对象Dio _createInstance() {if (_dio == null) {/// 全局属性:请求前缀、连接超时时间、响应超时时间var options = BaseOptions(// responseType: ResponseType.json,baseUrl: HttpPath.BaseUrl,connectTimeout: _connectTimeout,receiveTimeout: _receiveTimeout,sendTimeout: _sendTimeout,);//拦截器var interceptor = InterceptorsWrapper(onRequest: (options,handler){print("\n================================= 请求数据 =================================");print("method = ${options.method.toString()}");print("url = ${options.uri.toString()}");print("headers = ${options.headers}");print("params = ${options.queryParameters}");return handler.next(options);},onResponse: (response,handler,){print("\n================================= 响应数据开始 =================================");print("code = ${response.statusCode}");print("data = ${response.data}");print("================================= 响应数据结束 =================================\n");return handler.next(response);},onError: (e,handler){print("\n=================================错误响应数据 =================================");print("type = ${e.type}");print("message = ${e.message}");print("stackTrace = ${e.stackTrace}");print("\n");return handler.next(e);});_dio = Dio(options);_dio.interceptors.add(interceptor);}return _dio;}

封装Get和Post请求

Future<T> get<T>(String url, FormData? param) async {return _requestHttp<T>(url,param: param,method: GET,);}Future<T> post<T>(String url, FormData param) async {return _requestHttp<T>(url,param: param,method: POST,);}

网络请求

_requestHttp<T>(String url, {param, method}) async {_dio = _createInstance();try {Response response = await _dio.request(url,data: param,options: Options(method: method));if (response.statusCode == 200) return response.data;} on DioError catch (e) {/// 打印请求失败相关信息print("【请求出错】${e.toString()}");rethrow;}}

释放dio对象

clear() {_dio = null;}

封装类

class HttpUtil {// default optionsstatic const int _connectTimeout = 15000; //15sstatic const int _receiveTimeout = 15000;static const int _sendTimeout = 10000;static const String GET = 'get';static const String POST = 'post';static const String PUT = 'put';static const String PATCH = 'patch';static const String DELETE = 'delete';static var _dio;static HttpUtil? _httpUtil;static HttpUtil getInstance() => _httpUtil ??= HttpUtil();// 创建 dio 实例对象Dio _createInstance() {if (_dio == null) {/// 全局属性:请求前缀、连接超时时间、响应超时时间var options = BaseOptions(// responseType: ResponseType.json,baseUrl: HttpPath.BaseUrl,connectTimeout: _connectTimeout,receiveTimeout: _receiveTimeout,sendTimeout: _sendTimeout,);//拦截器var interceptor = InterceptorsWrapper(onRequest: (options,handler){print("\n================================= 请求数据 =================================");print("method = ${options.method.toString()}");print("url = ${options.uri.toString()}");print("headers = ${options.headers}");print("params = ${options.queryParameters}");return handler.next(options);},onResponse: (response,handler,){print("\n================================= 响应数据开始 =================================");print("code = ${response.statusCode}");print("data = ${response.data}");print("================================= 响应数据结束 =================================\n");return handler.next(response);},onError: (e,handler){print("\n=================================错误响应数据 =================================");print("type = ${e.type}");print("message = ${e.message}");print("stackTrace = ${e.stackTrace}");print("\n");return handler.next(e);});_dio = Dio(options);_dio.interceptors.add(interceptor);}return _dio;}Future<T> get<T>(String url, FormData? param) async {return _requestHttp<T>(url,param: param,method: GET,);}Future<T> post<T>(String url, FormData param) async {return _requestHttp<T>(url,param: param,method: POST,);}/// T is Map<String,dynamic>  or List<dynamic>_requestHttp<T>(String url, {param, method}) async {_dio = _createInstance();try {Response response = await _dio.request(url,data: param,options: Options(method: method));if (response.statusCode == 200) return response.data;} on DioError catch (e) {/// 打印请求失败相关信息print("【请求出错】${e.toString()}");rethrow;}}// 清空 dio 对象clear() {_dio = null;}}

解析

使用一个插件JsonToDartBeanAction,建造一个新的实体类,只需将对应的Json字符串复制进去,然后它就会自动生成实体类和对应的解析类

使用

Future<List<ITopEntity>?> getTopList(int skip,int limit) async {var url = HttpPath.getTop250(skip, limit);final result = await HttpUtil.getInstance().get(url, null);return jsonConvert.convertListNotNull<ITopEntity>(result);
}

Flutter——Dio网络库的使用与封装相关推荐

  1. flutter dio网络请求 get post 图片上传

    Dio下载地址github:dio 初始化网络请求 BaseOptions option = BaseOptions(); //初始化cotentType option.contentType = C ...

  2. Flutter Dio网络请求:DioError [DioErrorType.RESPONSE]: Http status error [400]或者[500]

    DioError [DioErrorType.RESPONSE]: Http status error [400] 1)检查请求参数是否正确 : 比如,如果参数map中value是一个数组,如下代码中 ...

  3. 发布一个基于 Reactor 模式的 C++ 网络库

    发布一个基于 Reactor 模式的 C++ 网络库 陈硕 (giantchen_AT_gmail) Blog.csdn.net/Solstice 2010 Aug 30 本文主要介绍 muduo 网 ...

  4. 《Linux多线程服务端编程:使用muduoC++网络库》学习笔记

    文章目录 第1章 线程安全的对象生命期管理 1.1 当析构函数遇到多线程 1.1.1 线程安全的定义 1.1.3 线程安全实例 1.2 对象的创建很简单 1.3 销毁很难 1.4 线程安全的Obser ...

  5. muduo网络库设计与实现(二)

    muduo网络库设计与实现(一) 文章目录 muduo网络库设计与实现(一) base InetAddress Socket 单线程网络库 Acceptor TcpServer TcpConnecti ...

  6. muduo网络库:18---muduo简介之(muduo库的由来、编译安装、目录结构、代码结构、线程模型)

    一.由来 2010年3月陈硕先生写了一篇<学之者生,用之者死--ACE历史与简评>(文章参阅:https://blog.csdn.net/Solstice/article/details/ ...

  7. dio网络框架封装_Flutter 使用dio来发起网络请求以及Cookie管理

    前言 Flutter官方建议您使用 dio 来发起网络请求,在学习过程中,也尝试过用dart io中的HttpClient发起的请求,这里主要讲一下dio的使用以及CookieJar.CookieMa ...

  8. Flutter Dio包网络请求抓包解决方案

    在Flutter中进行网络请求时,我们可以使用的库有3个,即Http请求库.HttpClient请求库和Dio请求库(详细介绍请参考:Flutter开发之Http网络请求),使用得最多的就是Dio请求 ...

  9. Flutter Dio的简易封装和demo

    flutter_net_demo 一个简单的flutter dio的封装, 包括: 日志打印, 网络进度, 返回json转bean, get post upload方法的封装, 简易可直接运行的dem ...

最新文章

  1. Swagger+AutoRest 生成web api客户端(.Net)
  2. 五十四、快速上手uniapp
  3. vue中mixin 感觉很牛逼(父子组件融合成一个新组件)
  4. php把这两个二维数组合并,两个二维数组的合并
  5. Lucas+阶乘打表+费马小定理模板2.0
  6. php laravel 理解,程序员-说一下PHP框架Laravel,如何理解她的思想
  7. 软件项目投标流程及注意事项
  8. java语言的基本介绍及相关特性
  9. 摄像头视频直播方案比较之方案二:乐橙云
  10. js实现电子签名功能
  11. 爬虫-东北林业大学校内-中国[哈尔滨]森林博物馆-爬取所有馆藏蝴蝶图片
  12. php的样式怎么设置字体大小,css中如何改变字体大小
  13. 计算机正确的录入指法教案,《文字录入教案》word版.doc
  14. 英语--罗塞塔学习总结
  15. pythonfunc函数的功能,python函数中def func(*args)这里*的作用是什么?
  16. TM1638驱动数码管的一点建议,附程序
  17. Tableau 2022.3的Table Extension到底怎么用?
  18. 同事逆袭面进阿里P7 年薪60W+,临别留下一张Android开发重点技术路线图
  19. JDK1.7绿色解压版64位
  20. Python实现微信自动化发送信息

热门文章

  1. TCPcopy安装、部署
  2. dart和C语言计算CRC32结果不同
  3. Odbgscript Updated to 1.65.4 by sunbeam
  4. 神经性脚臭案例整理(三)
  5. 杰里最新的 授权工具版本【篇】
  6. 拼多多:item_search-根据关键词取商品列表接口,拼多多关键词搜索API接口,拼多多上货API接口,拼多多API接口
  7. Simditor固定高度,禁止拉伸,开启滚动条效果
  8. 在PPT中显示时间以提醒演讲者控制时间
  9. C# WPF窗体+WCF实现五子棋
  10. 作为校招loser,我如何在一年半后的社招中咸鱼翻身