Dio下载地址github:dio
初始化网络请求
BaseOptions option = BaseOptions();
//初始化cotentType
option.contentType = ContentType.parse("application/json;charset=UTF-8");
//设置请求头参数
option.headers = {'token':'ab2343sdfsdfsfsdf1213123'};
//创建Dio
Dio dio = Dio(option);
发起get或者post请求
get
/*get请求*/
static Future<AjaxResult> get(String url, {Map params}) async {
if (params != null && params.isNotEmpty) {
// 如果参数不为空,则将参数拼接到URL后面
StringBuffer sb = StringBuffer("?");
params.forEach((key, value) {
sb.write("$key" + "=" + "$value" + "&");
});
String paramStr = sb.toString();
paramStr = paramStr.substring(0, paramStr.length - 1);
url += paramStr;
}
print('url---> $url');
Dio dio = getDio();
try {
Response res = await dio.get(url);
// var re = Utf8Decoder().convert(res.data);
final re = AjaxResult.fromJson(json.decode(res.data));
return re;
} on DioError catch (e) {
print(e);
FuntionUtil.toast(e.message);
}
}
post请求
static Future<AjaxResult> post(String url, {Map<String,dynamic> params}) async {
// final paramsjson = jsonEncode(params);
print('url---> $url params--->$params');
Dio dio = getDio();
try {
// var body = json.encode(paramsjson);
Response res = await dio.post(url, queryParameters: params);
print(res);
final re = AjaxResult.fromJson(json.decode(res.data));
return re;
// var re = Utf8Decoder().convert(res.data);
} on DioError catch (e) {
print(e);
FuntionUtil.toast(e.message);
}
}
图片上传
static Future<AjaxResult> upload(String url, File imgfile,
{Map<String, String> params}) async {
// final paramsjson = jsonEncode(params);
String path = imgfile.path;
var name = path.substring(path.lastIndexOf("/") + 1, path.length);
FormData formData = new FormData.from({
"Filedata": new UploadFileInfo(File(path), name),
"size":"0",
"majia":"zhaowojie",
// 'Files[]': [new UploadFileInfo(File(path), "sa"),new UploadFileInfo(File(path), name)],
});
Dio dio = getDio();
try {
// var body = json.encode(paramsjson);
Response res = await dio.post(url, data: formData);
print(res);
final re = AjaxResult.fromJson(json.decode(res.data));
return re;
} on DioError catch (e) {
print(e);
FuntionUtil.toast(e.message);
}
}
完整代码
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:dio/dio.dart';
import 'package:flutte_xms/model/ajaxresult.dart';
import 'package:flutte_xms/model/usermodel.dart';
import 'package:flutte_xms/util/func_util.dart';
import 'package:flutte_xms/util/usermanager.dart';
class DioReq {
/*get请求*/
static Future<AjaxResult> get(String url, {Map params}) async {
if (params != null && params.isNotEmpty) {
// 如果参数不为空,则将参数拼接到URL后面
StringBuffer sb = StringBuffer("?");
params.forEach((key, value) {
sb.write("$key" + "=" + "$value" + "&");
});
String paramStr = sb.toString();
paramStr = paramStr.substring(0, paramStr.length - 1);
url += paramStr;
}
print('url---> $url');
Dio dio = getDio();
try {
Response res = await dio.get(url);
// var re = Utf8Decoder().convert(res.data);
final re = AjaxResult.fromJson(json.decode(res.data));
return re;
} on DioError catch (e) {
print(e);
FuntionUtil.toast(e.message);
}
}
/*post请求*/
static Future<AjaxResult> post(String url, {Map params}) async {
// final paramsjson = jsonEncode(params);
print('url---> $url params--->$params');
Dio dio = getDio();
try {
// var body = json.encode(paramsjson);
Response res = await dio.post(url, data: params);
print(res);
final re = AjaxResult.fromJson(json.decode(res.data));
return re;
// var re = Utf8Decoder().convert(res.data);
} on DioError catch (e) {
print(e);
FuntionUtil.toast(e.message);
}
}
/*图片上传*/
static Future<AjaxResult> upload(String url, File imgfile,
{Map<String, String> params}) async {
// final paramsjson = jsonEncode(params);
String path = imgfile.path;
var name = path.substring(path.lastIndexOf("/") + 1, path.length);
FormData formData = new FormData.from({
"Filedata": new UploadFileInfo(File(path), name),
"size":"0",
"majia":"zhaowojie",
// 'Files[]': [new UploadFileInfo(File(path), "sa"),new UploadFileInfo(File(path), name)],
});
Dio dio = getDio();
try {
// var body = json.encode(paramsjson);
Response res = await dio.post(url, data: formData);
print(res);
final re = AjaxResult.fromJson(json.decode(res.data));
return re;
} on DioError catch (e) {
print(e);
FuntionUtil.toast(e.message);
}
}
static Dio getDio() {
BaseOptions option = BaseOptions();
option.contentType = ContentType.parse("application/json;charset=UTF-8");
//如果用户登录成功 将token带上
if (UserManager.shared.isLogin) {
UserInfo info = UserManager.shared.userInfo;
print('appLoginToken:${info.userId}');
if (info != null) {
option.headers = {
'userId': info.userId,
};
}
}
return Dio(option);
}
}
关于AjaxResult Model
const AjaxResultStateSuccess = 0;
class AjaxResult {
int status;
String msg;
dynamic data;
AjaxResult({this.status, this.msg, this.data});
AjaxResult.fromJson(Map<String, dynamic> json) {
status = json['status'];
msg = json['msg'];
data = json['data'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> datas = new Map<String, dynamic>();
datas['status'] = this.status;
datas['msg'] = this.msg;
datas['data'] = this.data;
return datas;
}
}
怎么使用 post get upload
DioReq.post(请求的url, params: {
'mobile': phone,
'authCodeType': 1,
}).then(
(res) {
if (res.status == AjaxResultStateSuccess){
print('验证码发送成功');
}else{
FuntionUtil.toast(res.msg);
}
},
);
//图片上传
DioReq.upload(请求的url, forgroundImg).then((res){
if(res.status == AjaxResultStateSuccess){
FuntionUtil.toast(res.msg);
print(res);
}else{
FuntionUtil.toast(res.msg);
}
});