import 'package:flutter/material.dart';
import "dart:convert" as json;
import 'package:shared_preferences/shared_preferences.dart';
import 'package:dio/dio.dart';
final isProd = bool.fromEnvironment('dart.vm.product');
String domain = isProd ? 'http://xxxxxx:9000' : 'http://192.168.31.150:9500';
BaseOptions options = BaseOptions(
baseUrl: domain,
connectTimeout: 5000,
receiveTimeout: 3000,
// 'Authorization': prefs.getString('token'),
headers: {'Authorization': "dio"},
);
class Ajax extends InterceptorsWrapper {
factory Ajax() => _getInstance();
static Ajax get instance => _getInstance();
static Ajax _instance;
Ajax._internal() {
dio.interceptors.add(InterceptorsWrapper(onRequest: (RequestOptions options) async {
// 在请求被发送之前做一些事情
print('onRequest');
return options; //continue
// 如果你想完成请求并返回一些自定义数据,可以返回一个`Response`对象或返回`dio.resolve(data)`。
// 这样请求将会被终止,上层then会被调用,then中返回的数据将是你的自定义数据data.
//
// 如果你想终止请求并触发一个错误,你可以返回一个`DioError`对象,或返回`dio.reject(errMsg)`,
// 这样请求将被中止并触发异常,上层catchError会被调用。
}, onResponse: (Response response) async {
// 在返回响应数据之前做一些预处理
print('onResponse');
return response; // continue
}, onError: (DioError e) async {
// 当请求失败时做一些预处理
return e; //continue
}));
}
static Ajax _getInstance() {
if (_instance == null) {
_instance = new Ajax._internal();
}
return _instance;
}
static Dio dio = Dio(options);
void getAjax(Map param, {Function success, Function fail, Function complete}) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
String url = '';
Response result = await dio.get(url, queryParameters: param['data']);
try {
if (success != null && result != null) {
success(result);
}
} catch (exception) {
if (fail != null) {
fail(exception);
}
}
if (complete != null) {
complete(result);
}
}
void post(String url, {Map data, Function success, Function fail, Function complete, BuildContext context}) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
if (data != null) {
data.forEach((key, value) {
if (data[key] is int) {
data[key] = data[key].toString();
}
});
}
Response result = await dio.post(url, data: data);
print(result);
if (result.statusCode == 200) {
if (success != null) {
success(result);
}
} else if (result.statusCode == 300) {
if (fail != null) {
fail(result);
}
} else if (result.statusCode == 401) {
// 没登录 需要跳转登录页面的 接口
List loginUrl = ['/collect/createOrdel', '/collect/page'];
if (loginUrl.indexOf(url) > -1) {
Navigator.pushNamed(context, '/login', arguments: {'callback': () {}});
}
if (fail != null) {
fail(result);
}
} else {
if (fail != null) {
fail(result);
}
}
if (complete != null) {
complete(result);
}
}
void login(Map param, {Function success, Function fail, Function complete}) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
Response result = await dio.post(param['url'], data: param['data']);
if (result.statusCode == 200) {
if (success != null) {
success(result);
}
} else if (result.statusCode == 300) {
if (fail != null) {
fail(result);
}
} else {
print(result.statusCode);
if (fail != null) {
fail(result);
}
}
if (complete != null) {
complete(result);
}
}
}
使用案例
import './Ajax.dart';
// 其他请求方式同理
Ajax().login(
{
'url': '/home/login',
'data': {'phone': _phone},
'complete': () {}
},
success: (res) async {
print(res);
ToastW.showToast('登录成功');
//await Future.delayed(Duration(milliseconds: 1500));
// widget.arg['callback']();
// Navigator.pop(context);
},
fail: (eer) {
print(eer);
ToastW.showToast(eer);
},
);