dio设置自定义post请求_Flutter Dio简单二次封装和自定义Header
话不多说自己看代码封装的比较简单,比较适合入门学习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相关推荐
- dio设置自定义post请求_flutter Dio封装get/post请求
最近刚学flutter,参考简书大佬们的文章,使用dio简单封装了一下网络请求工具类. 依赖版本 9683BF5F-1627-47F1-AE3A-ECBC55ED49CF.png 网络请求单例 A2F ...
- Flutter - dio 简单二次封装
demo 地址: https://github.com/iotjin/jh_flutter_demo Flutter Dio简单二次封装和自定义Header Flutter Dio二次封装 Flutt ...
- 帝国CMS调用自定义列表名称的方法(简单二次开发实现)
帝国CMS调用自定义列表名称的方法(简单二次开发实现) 本文讲述了帝国CMS调用自定义列表名称的方法,脚本之家在这里提供了2种实现方法,涉及针对帝国CMS底层代码的修改.具体如下: 一.问题描述: 需 ...
- dio设置自定义post请求_Flutter中的http网络请求
前言 由于刚过完年工作比较紧张,文章已经四周没有更新了,非常抱歉!接下来依然会尽量保持每周更新! 本篇介绍Flutter中网络请求相关api的使用,Flutter在Flutter engine中提供了 ...
- dio设置自定义post请求_flutter中dio的post请求方式使用总结
题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天. 重要消息 1 引言 dio用来在flutter跨平台开发中访问网络的框架,在使用的时候,我们首先是引入依赖 depen ...
- dio设置自定义post请求_Flutter 使用dio来发起网络请求以及Cookie管理
说点儿闲话 Flutter官方建议您使用 dio 来发起网络请求,在学习过程中,也尝试过用dart io中的HttpClient发起的请求,这里主要讲一下dio的使用以及CookieJar.Cooki ...
- 帝国php调用文章列表,帝国CMS调用自定义列表名称的方法(简单二次开发实现)
本文讲述了帝国CMS调用自定义列表名称的方法,脚本之家在这里提供了2种实现方法,涉及针对帝国CMS底层代码的修改.具体如下: 一.问题描述: 需要调出自定义列表名称,如下图所示: 而使用帝国CMS原有 ...
- 帝国PHP怎么调用字段名,帝国CMS调用自定义列表名称的方法(简单二次开发实现)...
这篇文章主要为大家介绍了帝国CMS调用自定义列表名称的方法,列举了两种实现技巧,涉及针对帝国CMS底层代码的修改,需要的朋友可以参考下 本文讲述了帝国CMS调用自定义列表名称的方法,编程之家 jb51 ...
- Navisworks API 简单二次开发 (自定义工具条)
在Navisworks软件运行的时候界面右侧有个工具条.比较方便.但是在二次开发的时候我不知道在Api那里调用.如果有网友知道请告诉我.谢谢. 我用就自己设置一个工具.界面比较丑!没有美工. 代码: ...
最新文章
- 名称的特殊处理(Name Mangling)
- 中科院计算机全国重点实验室,国家重点实验室
- 关于intent传递数据的练习
- mac wordpress php7,Mac 下基于 wordpress 搭建个人博客系统
- HTML-超链接锚点笔记
- Step by Step 使用HTML5开发一个星际大战游戏(1)
- Android----Allapps加载流程详解【AndroidICS4.0——Launcher系列五】
- 从本地或网页加载图片
- pandas loc, iloc, ix, at, iat用法
- 简单的豆瓣电影推荐系统demo
- 作为技术面试官,我在面试时考虑什么?
- 语音合成TTS主要模型分析
- 如何从0到1打磨一门 Elasticsearch 线上直播课?
- 详解C语言中的switch语句
- backtrader和vnpy哪个更好用?
- nginx-基础知识
- BeanDefinition介绍
- struts1的一些总结
- 修改Centos系统yum repo镜像地址
- xbox360游戏下载_完成的乐趣-通过Xbox向后兼容性探索旧游戏
热门文章
- linux下proc目录,Linux /proc目录详解
- java c3p0获取主键_Tomcatc3p0配置jnid数据源2种实现方法解析
- 如何知道mysql的地址_如何知道自己的计算机上mysql的地址?
- 分页查询插件PageHelper 5.x版本
- Spring 集成web环境
- 关于linux系统中无法识别某一命令问题的解决方案
- python实战学习之matplotlib绘图续
- delphi中的copy,delete,pos和leftstr,RightStr的用法
- 【IE大叔的嘴歪眼斜】之—— 由hasLayout引发的临床CSS Bug表
- [剑指offer]面试题第[63]题[Leetcode][第121题][JAVA][买卖股票的最佳时机][动态规划][暴力]