MyDio.dart 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. import 'dart:convert';
  2. import 'dart:io';
  3. import 'package:bbyyy/beans/simple_bean.dart';
  4. import 'package:bbyyy/my_tools/easy_loading/easy_loading.dart';
  5. import 'package:bbyyy/my_tools/global.dart';
  6. import 'package:bbyyy/my_tools/my_cookie.dart';
  7. import 'package:dio/dio.dart';
  8. import 'package:flutter/cupertino.dart';
  9. import 'package:flutter/material.dart';
  10. import 'package:simple_logger/simple_logger.dart';
  11. ///http请求成功回调
  12. typedef SCallBack<T> = void Function(Response response, bool hasError);
  13. ///失败回调
  14. typedef FCallBack = void Function(DioError error);
  15. final logger = SimpleLogger();
  16. class MyDio {
  17. //私有构造函数
  18. MyDio._internal() {
  19. initDio();
  20. }
  21. //保存单例
  22. static MyDio _singleton = MyDio._internal();
  23. //工厂构造函数
  24. factory MyDio() => _singleton;
  25. Dio dio; // 使用默认配置
  26. BaseOptions options;
  27. initDio() {
  28. // 或者通过传递一个 `options`来创建dio实例
  29. options = BaseOptions(
  30. baseUrl: MyCookie().getServer(),
  31. connectTimeout: 30000,
  32. receiveTimeout: 3000,
  33. );
  34. if (MyCookie().loginInformation != null) {
  35. options.headers = {
  36. '__token__': MyCookie().getToken(),
  37. '__user__': MyCookie().getUser(),
  38. 'Content-Type': 'application/json'
  39. };
  40. }
  41. dio = Dio(options);
  42. }
  43. post(String url, data, SCallBack sCallBack, FCallBack fCallBack) async {
  44. logger.info(MyCookie().getServer() + url);
  45. try {
  46. logger.info(json.encode(data));
  47. } catch (e) {}
  48. try {
  49. Response re = await dio.post(url, data: data);
  50. print(dio.options.headers);
  51. logger.info(MyCookie().getServer() + url);
  52. try {
  53. logger.info(json.encode(data));
  54. } catch (e) {}
  55. logger.info(re.data);
  56. if (await checkingReturnParameter(re.data)) {
  57. sCallBack(re, false);
  58. // EasyLoading.dismiss();
  59. } else {
  60. sCallBack(re, true);
  61. }
  62. } on DioError catch (e) {
  63. switch (e.type) {
  64. case DioErrorType.cancel:
  65. fCallBack(e);
  66. EasyLoading.showToast('请求已取消');
  67. break;
  68. case DioErrorType.connectTimeout:
  69. fCallBack(e);
  70. EasyLoading.showToast('链接超时');
  71. break;
  72. case DioErrorType.other:
  73. fCallBack(e);
  74. EasyLoading.showToast('网络错误');
  75. break;
  76. case DioErrorType.receiveTimeout:
  77. fCallBack(e);
  78. EasyLoading.showToast('接受超时');
  79. break;
  80. case DioErrorType.response:
  81. fCallBack(e);
  82. EasyLoading.showToast('服务器异常');
  83. break;
  84. case DioErrorType.sendTimeout:
  85. fCallBack(e);
  86. EasyLoading.showToast('网络不佳');
  87. break;
  88. default:
  89. fCallBack(e);
  90. EasyLoading.showToast('网络错误');
  91. }
  92. }
  93. }
  94. get(String url, SCallBack sCallBack, FCallBack fCallBack) async {
  95. try {
  96. Response re = await dio.get(url);
  97. logger.info(MyCookie().getServer() + url);
  98. logger.info(re.data);
  99. if (await checkingReturnParameter(re.data)) {
  100. sCallBack(re, false);
  101. // EasyLoading.dismiss();
  102. } else {
  103. sCallBack(re, true);
  104. }
  105. } on DioError catch (e) {
  106. switch (e.type) {
  107. case DioErrorType.cancel:
  108. fCallBack(e);
  109. EasyLoading.showToast('请求已取消');
  110. break;
  111. case DioErrorType.connectTimeout:
  112. fCallBack(e);
  113. EasyLoading.showToast('您的网络不稳定,请稍后重试');
  114. break;
  115. case DioErrorType.other:
  116. fCallBack(e);
  117. EasyLoading.showToast('您的网络不稳定,请稍后重试');
  118. break;
  119. case DioErrorType.receiveTimeout:
  120. fCallBack(e);
  121. EasyLoading.showToast('您的网络不稳定,请稍后重试');
  122. break;
  123. case DioErrorType.response:
  124. fCallBack(e);
  125. EasyLoading.showToast('您的网络不稳定,请稍后重试');
  126. break;
  127. case DioErrorType.sendTimeout:
  128. fCallBack(e);
  129. EasyLoading.showToast('您的网络不稳定,请稍后重试');
  130. break;
  131. default:
  132. fCallBack(e);
  133. EasyLoading.showToast('您的网络不稳定,请稍后重试');
  134. }
  135. }
  136. }
  137. query(data, SCallBack sCallBack, FCallBack fCallBack) {
  138. post('/data/query', data, sCallBack, fCallBack);
  139. }
  140. save(data, SCallBack sCallBack, FCallBack fCallBack) {
  141. post('/data/save', data, sCallBack, fCallBack);
  142. }
  143. del(data, SCallBack sCallBack, FCallBack fCallBack) {
  144. post('/data/delete', data, sCallBack, fCallBack);
  145. }
  146. update(data, SCallBack sCallBack, FCallBack fCallBack) {
  147. post('/data/update', data, sCallBack, fCallBack);
  148. }
  149. updateM(
  150. data, SCallBack sCallBack, FCallBack fCallBack) {
  151. post('/data/updateM', data, sCallBack, fCallBack);
  152. }
  153. loginUpload(File _image, String user, String token, SCallBack sCallBack,
  154. FCallBack fCallBack, BuildContext context) async {
  155. var s = '/file/upload?token=$token&user=$user';
  156. logger.info(MyCookie().getServer() + s);
  157. var name = _image.path
  158. .substring(_image.path.lastIndexOf("/") + 1, _image.path.length);
  159. print(name);
  160. FormData formData = new FormData.fromMap({
  161. '__files__': await MultipartFile.fromFile(
  162. _image.path,
  163. filename: name,
  164. ),
  165. });
  166. post(s, formData, sCallBack, fCallBack);
  167. }
  168. upload(File _image, SCallBack sCallBack, FCallBack fCallBack,
  169. BuildContext context) async {
  170. var s = '/file/upload?${MyCookie().getUT()}';
  171. logger.info(MyCookie().getServer() + s);
  172. var name = _image.path
  173. .substring(_image.path.lastIndexOf("/") + 1, _image.path.length);
  174. print(name);
  175. FormData formData = new FormData.fromMap({
  176. '__files__': await MultipartFile.fromFile(
  177. _image.path,
  178. filename: name,
  179. ),
  180. });
  181. post(s, formData, sCallBack, fCallBack);
  182. }
  183. loginUpdate(data, String user, String token, SCallBack sCallBack,
  184. FCallBack fCallBack, BuildContext context) {
  185. String s = '/rdm/update?token=$token&user=$user';
  186. logger.info(MyCookie().getServer() + s);
  187. post(s, data, sCallBack, fCallBack);
  188. }
  189. Future<bool> checkingReturnParameter(data) async {
  190. SimpleBean simpleBean;
  191. try {
  192. simpleBean = SimpleBean.fromJson(json.decode(data));
  193. } catch (e) {
  194. print(e);
  195. }
  196. if (simpleBean != null) {
  197. if (simpleBean.error == null || simpleBean.error.length == 0) {
  198. return true;
  199. } else {
  200. EasyLoading.showToast(simpleBean.error);
  201. if (simpleBean.error.contains('token')||simpleBean.error.contains('会话过期,请重新登录')) {
  202. MyCookie().clean();
  203. navigatorKey.currentState.pushNamedAndRemoveUntil('/loginPage', ModalRoute.withName("/loginPage"));
  204. }
  205. return false;
  206. }
  207. } else {
  208. return false;
  209. }
  210. }
  211. }