You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

217 lines
6.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

// Dart imports:
import 'dart:convert';
import 'dart:io';
// Package imports:
import 'package:dio/adapter.dart';
import 'package:dio/dio.dart';
// Project imports:
import 'base_model.dart';
// import 'net_header.dart';
// import 'package:light_wave/utils/global_toast.dart';
// import 'package:light_wave/pages/login/login_page.dart';
// import 'package:light_wave/routers/application.dart';
// import 'package:fluttertoast/fluttertoast.dart';
/// 自定义枚举
enum Method { get, post }
class Net {
// 工厂模式
factory Net() => _getInstance();
static Net get instance => _getInstance();
static Net _instance;
Dio dio;
Net._internal() {
// 初始化
dio = Dio(
BaseOptions(
connectTimeout: 60000, // 连接服务器超时时间,单位是毫秒.
receiveTimeout: 10000, // 响应流上前后两次接受到数据的间隔,单位为毫秒, 这并不是接收数据的总时限.
// contentType: ContentType.parse('x-www-form-urlencoded').toString(),
// responseType: ResponseType.plain,
// responseType: ResponseType.json,
),
);
(dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate =
(client) {
client.badCertificateCallback =
(X509Certificate cert, String host, int port) {
//TODO
return true;
};
};
}
/// 打印拦截器(便于调试)
static final interceptors = InterceptorsWrapper(
/// 请求发送前处理处理一些事情
onRequest: (RequestOptions options) {
print("--------------------请求参数---------------------");
print(json.encode(options.headers));
print(options.method);
print(options.queryParameters);
print(options.baseUrl + options.path);
print(options.data);
print("--------------------请求参数---------------------");
return options;
},
/// 在数据响应前做一些预处理
onResponse: (Response response) {
// Log.i("--------------------响应结果---------------------");
// Log.e("response.statusCode", "${response.statusCode}");
// Log.e("response.data", "${json.encode(response.data)}");
// Log.e("response.headers", "${response.headers}");
// Log.i("--------------------响应结果---------------------");
return response;
},
/// 错误处理
onError: (DioError e) {
// Log.e("DioError", "$e");
return e;
},
);
// 单列模式
static Net _getInstance() {
if (_instance == null) {
_instance = Net._internal();
}
return _instance;
}
get(String url, Map<String, dynamic> params,
{Function success, Function failure}) {
_doRequest(url, params, Method.get, success, failure);
}
post(String url, Map<String, dynamic> params,
{Function success, Function failure}) {
_doRequest(url, params, Method.post, success, failure);
}
void _doRequest(String url, Map<String, dynamic> params, Method method,
Function successCallBack, Function failureCallBack) async {
try {
/// 可以添加header
// if (isIntelligent) {
// dio.options.headers.addAll(await NetHeader.getZnToken());
// } else {
// if (isContentType) {
// dio.options.contentType =
// ContentType.parse("application/x-www-form-urlencoded").toString();
// }
// dio.options.headers.addAll(NetHeader.dmsHeaders);
// }
dio.interceptors.add(interceptors);
Response response;
switch (method) {
case Method.get:
if (params != null && params.isNotEmpty) {
response = await dio.get(url, queryParameters: params);
} else {
response = await dio.get(url);
}
break;
case Method.post:
if (params != null && params.isNotEmpty) {
response = await dio.post(url, data: params);
} else {
response = await dio.post(url);
}
break;
}
Map<String, dynamic> result = json.decode(response.toString());
// 打印信息
print('''api: $url\nparams: $params\nresult: $result''');
// 转化为model
BaseModel model = BaseModel.fromJson(result);
if (model.code == 100 || model.code == 0) {
// 100 请求成功
if (successCallBack != null) {
//返回请求数据
if (model.result == null) {
successCallBack(model.message);
} else {
successCallBack(model.result);
}
}
} else {
//TODO
//直接使用Toast弹出错误信息
//返回失败信息
// GlobalToast.globalToast('${model.message}!~');
if (failureCallBack != null) {
failureCallBack(model.code);
// if (model.code == 1 && model.message == 'token过期') {
// Application.navigatorKey.currentState.pushNamedAndRemoveUntil(
// "/LoginPage", ModalRoute.withName("/"));
// }
// failureCallBack(model.message);
}
}
} catch (exception) {
print('错误:${exception.toString()}');
// FlutterToast.showToast(msg: "请求失败,请稍后再试");
if (failureCallBack != null) {
failureCallBack(exception.toString());
}
}
}
// 上传文件(图片)
// doUploadFile(String url, File file, String loadingText,Function successCallBack,
// Function failureCallBack) async {
// try {
// String timeStamp = DateTime.now().millisecondsSinceEpoch.toString();
// FormData formData = FormData.from({
// 'file': UploadFileInfo(file, '$timeStamp.jpg',
// contentType: ContentType.parse("image/jpeg"))
// });
// Response response = await dio.post(url, data: formData);
// print('$response'); // 在需要生成model时需要json格式
// Map<String, dynamic> result = json.decode(response.toString());
// assert(() {
// // assert只会在debug模式下执行release模式下不会执行
// // 打印信息
// print('''api: $url\nresult: $result''');
// return true;
// }());
// BaseModel model = BaseModel.fromJson(result);
// if (model.code == 200) {
// // 200 请求成功
// if (successCallBack != null) {
// if (model.data != null) {
// successCallBack(model.data);
// } else {
// successCallBack({});
// }
// }
// } else {
// //Fluttertoast.showToast(msg: "${model.msg}");
// if (failureCallBack != null) {
// failureCallBack(model.msg);
// }
// }
// } catch (exception) {
// assert(() {
// // 打印信息
// print('''api: $url\n错误${exception.toString()}''');
// return true;
// }());
// // Fluttertoast.showToast(msg: '加载失败');
// if (failureCallBack != null) {
// failureCallBack(exception.toString());
// }
// }
// }
}