首先 pubspec.yaml里面添加dio依赖模块

dio: ^3.0.10

由于 http请求常用的是GET和POST方法, 请求参数格式要么JSON,要么XML, 所以我在第一次封装dio http请求时用了四个方法:Get with Json, GET with XML, Post with Json, Post with xml。

完成后发现好多重复代码,于是就相办法把四个方法合并成一个方法,调用的时候传入需要的参数即可

譬如 请求method, 可传入“GET”, 或“POST”,

请求参数类型contentType  可传入“JSON” 或“XML”

回调函数  onSuccess, onError

具体代码如下


import 'dart:convert' show json;import 'dart:io';import 'package:dio/dio.dart';class DioUtils {/// global dio objectstatic Dio dio;/// http request methodsstatic Map<String, dynamic> jsonHeaders = {'Accept': 'application/json,*/*','Content-Type': 'application/json',};static Map<String, dynamic> xmlHeaders = {'Accept': 'application/xml,*/*','Content-Type': 'application/xml;charset=UTF-8',};static void requestHttp<T>(String url,   //请求地址url{parameters,  //get 请求时的param listmethod, // “GET” 或者 “POST”data, // post 请求时上传的数据contentType, // 请求data 是 json 或者 xmlFunction(T t) onSuccess, //请求成功时的回调函数Function(String error) onError //请求失败时的回调函数}) async {method = method ?? 'GET';contentType = contentType ?? 'JSON';Map<String, dynamic> httpHeaders;if (contentType == 'XML') {httpHeaders = jsonHeaders;} else {httpHeaders = xmlHeaders;}var options = BaseOptions(connectTimeout: 3000,receiveTimeout: 3000,responseType: ResponseType.json,validateStatus: (status) {// 不使用http状态码判断状态,使用AdapterInterceptor来处理(适用于标准REST风格)return true;},baseUrl: "");try {if (dio == null) {dio = new Dio(options);}dio.options.headers = httpHeaders;Response response;if (method == "GET") {if (parameters == null) {response = await dio.get(url);} else {response = await dio.get(url, queryParameters: parameters);}} else if (method == "POST") {if (data == null) {response = await dio.post(url);} else {response = await dio.post(url, data: data);}}var responseData = response.data;if (response.statusCode == 200) {if (onSuccess != null) {onSuccess(responseData);}} else {throw Exception('erroMsg:${response.statusCode}');}print('响应数据:' + response.toString());} catch (e) {print('请求出错:' + e.toString());if (onError != null) onError(e.toString());}}}

GET  方法调用例子:

onSuccess(var responseData) {print("callback funtion onSuccess called");}onError(var error) {print("callback funtion onError error:$error");}await DioUtils.requestHttp("http://XXXXXXX,method: "GET",onSuccess: onSuccess,onError: onError);

POST 方法调用例子:

g
onSuccess(var responseData) {print("callback funtion onSuccess called");}onError(var error) {print("callback funtion onError error:$error");
}getPageData() async {var _data = "<request key=\"xxxxx\">……</request>";await DioUtils.requestHttp("http://XXXXXXXX",data: _data,method: "POST",contentType: "XML",onSuccess: onSuccess,onError: onError);
}
以上代码基本上能满足一个简单app的http Get/Post请求。

仅一个方法搞定Flutter Http Dio 请求相关推荐

  1. 手机android id修改密码,手机锁屏密码忘了?一个方法搞定

    今天,我们就分几种情况来解决这个难题. 如何清除苹果手机的锁屏密码你有手机注册时的ID和密码: iTunes软件界面 那很好办,如上图,电脑上下载iTunes软件进行恢复出厂即可,这样就可以清除密码. ...

  2. 一个方法搞定安卓路由跳转

    前言 团队分模块开发在大项目上很常见,但项目组A想跳转到一个项目组B负责的Activity,此时若B未创建该Activity,则会影响项目进度,由此,安卓路由跳转出现了 原理 原理比较简单,大家都知道 ...

  3. border渐变 ios_iOS一个方法搞定view渐变色

    Demo 使用效果//包含头文件UIView+Gradient.h [self.label setGradientBackgroundWithColors:@[[UIColor redColor],[ ...

  4. 将你的前端应用打包成docker镜像并部署到服务器?仅需一个脚本搞定

    1.前言 前段时间,自己搞了个阿里云的服务器.想自己在上面折腾,但是不想因为自己瞎折腾而污染了现有的环境.毕竟,现在的阿里云已经没有免费的快照服务了.要想还原的话,最简单的办法就是重新装系统.而一旦重 ...

  5. python利器app怎么查文献-科研人必备:一个工具搞定文献查阅、数据分析、模型搭建...

    原标题:科研人必备:一个工具搞定文献查阅.数据分析.模型搭建 写论文有多难?这首诗形容得好: 进入学校先选题,踌躇满志万人敌:发现前辈都做过,满脸懵逼加惊奇. 终于找到大空白,我真是个小天才:左试右试 ...

  6. 封装一个类搞定90%安卓客户端与服务器端交互

    本实例封装了一个处理安卓客户端与服务器端交互的几个方法,对于中文乱码问题本实例也找到了解决方案.本例可以处理的场景如下: 1.与服务器端交互json数据. 2.Get方式与服务器端交互数据. 3.Po ...

  7. labview 重新启动后上次_还在为labview保存参数而苦恼吗?看看一个vi搞定全部

    2020labview懒人参数存取-升级版 问题:项目编程过程中,参数存取是无论如何也没法避免的一个环节,因为程序设置完成后,下次再打开时如果要执行上次设置的参数,就需要加载上次保存的参数文件.那么以 ...

  8. php调用jssdk转发_php一个文件搞定微信jssdk配置

    php一个文件搞定微信jssdk配置: 包括缓存,包括https通讯,获取微信access_token,签名什么的都有.但是防范性编程做得比较少,商业用的话,需要完善下代码. 使用姿势 ^ajax(C ...

  9. 通用人工智能最新突破!一个Transformer搞定一切

    Datawhale干货 编辑:梦晨 鱼羊,来源:量子位 通用人工智能,还得看DeepMind. 这回,只一个模型,使用相同的权重,不仅把看家本领雅达利游戏玩得飞起. 和人类聊聊天.看图写话也不在话下. ...

最新文章

  1. 手持终端以物联网的模式
  2. 算法----实现strStr 函数
  3. 在Android Studio中有六种依赖
  4. 谈C/C++指针精髓
  5. cylance做的机器学习相关材料汇总
  6. python制作动态条形图-python – 动态更新matplotlib中的条形图
  7. 12种提升视频质量的方法
  8. 路由器的基本配置实验报告_上了全屋智能,家里路由器不给力,更换路由器时要注意什么...
  9. WebApi管理和性能测试工具WebApiBenchmarks
  10. 如何枚举JavaScript对象的属性? [重复]
  11. Tricks(四十八)—— 注释一段代码
  12. 万能五笔2005输入法平台6.46版---试用手记
  13. 打印机服务器启用后自动关闭,打印机print spooler服务启动后总是自动停止的解决方法(没测试)...
  14. 使用WPF设计类似Visio的简单绘图软件
  15. 终于找到了IE6修复大全
  16. 苹果手机怎么验证app_【图文】苹果手机如何下载安装APP
  17. Unity_AR制作_80
  18. JavaScript高级04 正则表达式
  19. GB、Gb、MB、Mb知识扫盲
  20. 基于vue2编写的md编辑器-Bytemd

热门文章

  1. 表面处理之阳极氧化基本常识
  2. 云计算的概况和发展:Ubiquitous Supercomputing Power
  3. 数据结构和算法概念理解
  4. 模拟登录正方教务管理系统-JAVA实现
  5. TCP 中确认应答机制
  6. 网站加速的【5大因素】
  7. 用FireFox+FVD看TS格式流媒体视频
  8. 一条咸鱼试图骗分的故事
  9. C语言随机数的生成及三个具体案例详解
  10. js 打印helloworld