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) {

},

);

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433475.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决asterisk sip呼叫 488 no acceptable here

这两天实验了一下asterisk static realtime方案,将sip.conf的信息保存到mysql数据库里。但是呼叫的时候,总是 报 488 no acceptable here。 这是我的sip.conf文件,数据库里和sip.conf文件一模一样,但是就是不行。 [general] c…

怎么安装python3.6.5_Centos7 安装Python3.6.5

一、centos7 安装 Python3.6.5教程1、在安装Python之前,需要先安装一些后面遇到的依赖问题(如果有依赖问题,按照提示安装):yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-d…

关于浏览器模式和文本模式的困惑

什么是浏览器模式和文本模式? 经常使用IE开发者工具的同学,肯定见过浏览器模式和文本模式,对于这两个名词,综合相关文档解释如下: 浏览器模式(Browser Mode),用于切换IE针对该网页的…

mysql 关联索引_mysql中关于关联索引的问题——对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引?...

情况描述:在MySQL的user表中,对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引?根据查询字段的位置不同来决定,如查询a, a,b a,b,c a,c 都可以走索引的&#…

A20 看门狗

前言 说到看门狗,应该不会陌生,看门狗说白了就是一个定时器,但是它有一个非常重要的功能就是复位系统。在A20里,看门狗的操作非常简单,只有两个寄存器,不需要操作时钟相关的东西,系统起来后可以…

python拼接大量ts文件_Python爬取.ts文件,合并为mp4

目标:爬影视网站ts文件到本地,合并成mp4文件下载ts文件本着不重复造轮子的精神(好吧其实是我懒),想用迅雷批量下载爬取,但是迅雷提供的通配符过于简单无法构造URL,只能自己写脚本如下:# -*- coding: utf-8 …

android学习笔记之ProgressDialog的使用

在很多PC软件或手机软件中,我们都会看见 “加载中...” 类似的对话框,当然,在android应用程序中也是如此。如果我们想在android应用程序中使用这样的效果,那么就需要用到ProgressDialog。首先,我们来看一下ProgressDia…

asterisk 互联问题

asterisk A 和asterisk B互联。 A下面有账户1001,B下面有账户2001 当1001呼叫2001时,B的sip.conf里不能有1001。 当2001呼叫1001时,A的sip.conf里不能有2001。 否则,呼叫无法呼叫成功。 下面为截图 实际和在振铃时&#xff0…

清除python shell中的内容_如何使用python脚本定时清空文件内容?

我们一直在对大家强调关于python脚本的使用,但是有部分同学提出疑问,就是关于上期跟大家说的shell脚本没有实质性的使用效果,如果在实际应用里,要怎么使用这个脚本,它又能实现什么效果,其实针对这个内容&am…

ACCESS中不支持left join解决方案

今天在做基于 access数据库项目中,做外连接时,发现Access不支持两个以上的 left join 在网上查一下,有哥们说每个 left join 要加 () 在修改之前(不能执行,ms sql 里执行以通过) select table1.fildes1, table1.fildes2,table2.fildes1, table2.fildes2,table3.fildes…

docker mysql主从_使用docker 实现MySQL主从同步/读写分离

1. 利用 docker 实现 mysql 主从同步 / 读写分离为了保证数据的完整和安全,mysql 设计了主从同步,一个挂掉还可以用另个。最近重构论坛,想来改成主从吧。担心失误,就先拿 docker 练练手。通过本文实际你会操作到。mysql 的主从同步…

Linux中的EAGAIN含义

在Linux环境下开发经常会碰到很多错误(设置errno),其中EAGAIN是其中比较常见的一个错误(比如用在非阻塞操作中)。从字面上来看,是提示再试一次。这个错误经常出现在当应用程序进行一些非阻塞(non-blocking)操作(对文件或socket)的时候。例如,…

mysql sys 数据库_mysql sys 数据库

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航,为用户…

python get方法请求参数_如何解决TypeError get()在使用get方法的Python请求中恰好接受2个参数(给定3个)...

在Python中使用Request对象时出现错误.下面是我的代码.class APIDOC(Document):def request_api(self):method_type self.method_typeapi self.apiparameters self.parameterssession_object requests.session()self.get_login(session_object)if method_type "POST&…

getsockname与getpeername

getsockname与getpeername是返回套接口关联的本地协议地址和远程协议地址。 int getsockname(int sockfd, struct sockaddr * localaddr, socken_t * addrlen); int getpeername(int sockfd, struct sockaddr * peeraddr, socken_t * addrlen); 返回0表示成功,返回1…

KingPaper初探ThinkPHP3.1.2之目录部署(二)

在我们使用Thinkphp搭建项目时,目录部署是必不可少的一个环节接下来我们来学习以下目录部署在APP目录下面现在项目目录下所拥有的文件 ThinkPHP目录 存放thinkphp框架系统目录Home 我们创建的应用目录index.php我们的入口文件 我们还需要创建Public 网站所有的公共…

mysql函数match_Mysql全文搜索match…against的用法 | 学步园

全文检索在 MySQL 中就是一个 FULLTEXT 类型索引。FULLTEXT索引用于 MyISAM 表,可以在 CREATE TABLE 时或之后使用 ALTER TABLE 或 CREATE INDEX 在CHAR、 VARCHAR 或 TEXT 列上创建。对于大的数据库,将数据装载到一个没有 FULLTEXT 索引的表中&#x…

华为手机可以安装python吗_何安装python2.6

由于机器上的python 版本比较高,需要安装一个低版本的python具体执行步骤:1. 使用如下命令下载到2.6版本wget http://www.python.org/ftp/python/2.6/Python-2.6.tgz2. 解压pythontar xzf Python-2.6.tgzcd Python-2.63. 编译安装python./configure --pr…

Linux串口编程

.串口概述 常见数据通信方式:并行通信,串行通信 UART的主要操作: >数据发送及接受 >产生中断 >产生波特率 >Loopback模式 >红外模式 >自动流控模式 串口参数的配置主要包括:波特率、数据位、停止位、流控协议…

[转]如何在.NET MVC中使用jQuery并返回JSON数据

本文转自:http://blog.sina.com.cn/s/blog_48e42dc90100xp1p.html 二、开始实践 - jQuery端 假设我们要从服务器端获取一个文章列表,并把文章条目显示在页面中,而加载的过程要用ajax实现,即实现异步加载。那么我们先来完成jquery向…