话不多说自己看代码封装的比较简单,比较适合入门学习Dio。

import 'package:dio/dio.dart';

import 'Api.dart';

/*

* 封装 restful 请求

*

* GET、POST、DELETE、PATCH

* 主要作用为统一处理相关事务:

* - 统一处理请求前缀;

* - 统一打印请求信息;

* - 统一打印响应信息;

* - 统一打印报错信息;

*/

class DioUtils {

/// global dio object

static Dio dio;

/// default options

static const int CONNECT_TIMEOUT = 10000;

static const int RECEIVE_TIMEOUT = 3000;

static const String TOKEN = "1373a739fd8599909738511f41831623";

/// http request methods

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';

/// 创建 dio 实例对象

static Dio createInstance() {

if (dio == null) {

/// 全局属性:请求前缀、连接超时时间、响应超时时间

var options = BaseOptions(

connectTimeout: 150000,

receiveTimeout: 150000,

responseType: ResponseType.json,

validateStatus: (status) {

// 不使用http状态码判断状态,使用AdapterInterceptor来处理(适用于标准REST风格)

return true;

},

baseUrl: Api.baseUrlDevelop,

headers: httpHeaders);

dio = new Dio(options);

}

return dio;

}

/// 清空 dio 对象

static clear() {

dio = null;

}

///Get请求

static void getHttp(

String url, {

parameters,

Function(T) onSuccess,

Function(String error) onError,

}) async {

///定义请求参数

parameters = parameters ?? {};

//参数处理

parameters.forEach((key, value) {

if (url.indexOf(key) != -1) {

url = url.replaceAll(':$key', value.toString());

}

});

try {

Response response;

Dio dio = createInstance();

response = await dio.get(url, queryParameters: parameters);

var responseData = response.data;

if (responseData['erroCode'] == 2000) {

if (onSuccess != null) {

onSuccess(responseData['result']);

}

} else {

throw Exception('erroMsg:${responseData['erroMsg']}');

}

print('响应数据:' + response.toString());

} catch (e) {

print('请求出错:' + e.toString());

onError(e.toString());

}

}

///Post请求

static void postHttp(

String url, {

parameters,

Function(T) onSuccess,

Function(String error) onError,

}) async {

///定义请求参数

parameters = parameters ?? {};

//参数处理

parameters.forEach((key, value) {

if (url.indexOf(key) != -1) {

url = url.replaceAll(':$key', value.toString());

}

});

try {

Response response;

Dio dio = createInstance();

response = await dio.post(url, queryParameters: parameters);

var responseData = response.data;

if (responseData['erroCode'] == 2000) {

if (onSuccess != null) {

onSuccess(responseData['result']);

}

} else {

throw Exception('erroMsg:${responseData['erroMsg']}');

}

print('响应数据:' + response.toString());

} catch (e) {

print('请求出错:' + e.toString());

onError(e.toString());

}

}

/// request Get、Post 请求

//url 请求链接

//parameters 请求参数

//method 请求方式

//onSuccess 成功回调

//onError 失败回调

static void requestHttp(String url,

{parameters,

method,

Function(T t) onSuccess,

Function(String error) onError}) async {

parameters = parameters ?? {};

method = method ?? 'GET';

if (method == DioUtils.GET) {

getHttp(

url,

parameters: parameters,

onSuccess: (data) {

onSuccess(data);

},

onError: (error) {

onError(error);

},

);

} else if (method == DioUtils.POST) {

postHttp(

url,

parameters: parameters,

onSuccess: (data) {

onSuccess(data);

},

onError: (error) {

onError(error);

},

);

}

}

}

/// 自定义Header

Map httpHeaders = {

'Accept': 'application/json,*/*',

'Content-Type': 'application/json',

'token': DioUtils.TOKEN

};

使用

var param = {

'taskCode ': 'XC202001020003'};

DioUtils.requestHttp(

Api.verificationSurvey,

parameters: param,

method:DioUtils.GET,

onSuccess: (data) {

},

onError: (error) {

},

);

}

dio设置自定义post请求_Flutter Dio简单二次封装和自定义Header相关推荐

  1. dio设置自定义post请求_flutter Dio封装get/post请求

    最近刚学flutter,参考简书大佬们的文章,使用dio简单封装了一下网络请求工具类. 依赖版本 9683BF5F-1627-47F1-AE3A-ECBC55ED49CF.png 网络请求单例 A2F ...

  2. Flutter - dio 简单二次封装

    demo 地址: https://github.com/iotjin/jh_flutter_demo Flutter Dio简单二次封装和自定义Header Flutter Dio二次封装 Flutt ...

  3. 帝国CMS调用自定义列表名称的方法(简单二次开发实现)

    帝国CMS调用自定义列表名称的方法(简单二次开发实现) 本文讲述了帝国CMS调用自定义列表名称的方法,脚本之家在这里提供了2种实现方法,涉及针对帝国CMS底层代码的修改.具体如下: 一.问题描述: 需 ...

  4. dio设置自定义post请求_Flutter中的http网络请求

    前言 由于刚过完年工作比较紧张,文章已经四周没有更新了,非常抱歉!接下来依然会尽量保持每周更新! 本篇介绍Flutter中网络请求相关api的使用,Flutter在Flutter engine中提供了 ...

  5. dio设置自定义post请求_flutter中dio的post请求方式使用总结

    题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天. 重要消息 1 引言 dio用来在flutter跨平台开发中访问网络的框架,在使用的时候,我们首先是引入依赖 depen ...

  6. dio设置自定义post请求_Flutter 使用dio来发起网络请求以及Cookie管理

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

  7. 帝国php调用文章列表,帝国CMS调用自定义列表名称的方法(简单二次开发实现)

    本文讲述了帝国CMS调用自定义列表名称的方法,脚本之家在这里提供了2种实现方法,涉及针对帝国CMS底层代码的修改.具体如下: 一.问题描述: 需要调出自定义列表名称,如下图所示: 而使用帝国CMS原有 ...

  8. 帝国PHP怎么调用字段名,帝国CMS调用自定义列表名称的方法(简单二次开发实现)...

    这篇文章主要为大家介绍了帝国CMS调用自定义列表名称的方法,列举了两种实现技巧,涉及针对帝国CMS底层代码的修改,需要的朋友可以参考下 本文讲述了帝国CMS调用自定义列表名称的方法,编程之家 jb51 ...

  9. Navisworks API 简单二次开发 (自定义工具条)

    在Navisworks软件运行的时候界面右侧有个工具条.比较方便.但是在二次开发的时候我不知道在Api那里调用.如果有网友知道请告诉我.谢谢. 我用就自己设置一个工具.界面比较丑!没有美工. 代码: ...

最新文章

  1. 名称的特殊处理(Name Mangling)
  2. 中科院计算机全国重点实验室,国家重点实验室
  3. 关于intent传递数据的练习
  4. mac wordpress php7,Mac 下基于 wordpress 搭建个人博客系统
  5. HTML-超链接锚点笔记
  6. Step by Step 使用HTML5开发一个星际大战游戏(1)
  7. Android----Allapps加载流程详解【AndroidICS4.0——Launcher系列五】
  8. 从本地或网页加载图片
  9. pandas loc, iloc, ix, at, iat用法
  10. 简单的豆瓣电影推荐系统demo
  11. 作为技术面试官,我在面试时考虑什么?
  12. 语音合成TTS主要模型分析
  13. 如何从0到1打磨一门 Elasticsearch 线上直播课?
  14. 详解C语言中的switch语句
  15. backtrader和vnpy哪个更好用?
  16. nginx-基础知识
  17. BeanDefinition介绍
  18. struts1的一些总结
  19. 修改Centos系统yum repo镜像地址
  20. xbox360游戏下载_完成的乐趣-通过Xbox向后兼容性探索旧游戏

热门文章

  1. linux下proc目录,Linux /proc目录详解
  2. java c3p0获取主键_Tomcatc3p0配置jnid数据源2种实现方法解析
  3. 如何知道mysql的地址_如何知道自己的计算机上mysql的地址?
  4. 分页查询插件PageHelper 5.x版本
  5. Spring 集成web环境
  6. 关于linux系统中无法识别某一命令问题的解决方案
  7. python实战学习之matplotlib绘图续
  8. delphi中的copy,delete,pos和leftstr,RightStr的用法
  9. 【IE大叔的嘴歪眼斜】之—— 由hasLayout引发的临床CSS Bug表
  10. [剑指offer]面试题第[63]题[Leetcode][第121题][JAVA][买卖股票的最佳时机][动态规划][暴力]