request.dart 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import 'dart:io';
  2. import 'package:bot_toast/bot_toast.dart';
  3. import 'package:dio/dio.dart';
  4. import 'package:dio/adapter.dart';
  5. import '../utils/index.dart';
  6. import '../models/index.dart';
  7. class Request {
  8. static Dio _dio;
  9. // init network
  10. static void init() {
  11. _dio = Dio(BaseOptions(
  12. sendTimeout: 15000,
  13. receiveTimeout: 15000,
  14. connectTimeout: 15000,
  15. // baseUrl: "http://twong.h/api/",
  16. baseUrl: "https://twong.shotshock.shop/api/",
  17. headers: {}));
  18. (_dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate =
  19. (client) {
  20. client.badCertificateCallback =
  21. (X509Certificate cert, String host, int port) {
  22. return true;
  23. };
  24. };
  25. updateToken();
  26. }
  27. // update token
  28. static void updateToken() {
  29. var token = Cache.token;
  30. if(token == null) {
  31. Request.setHeader("Authori-zation", null);
  32. } else {
  33. Request.setHeader("Authori-zation", "Bearer ${token?.token}");
  34. }
  35. }
  36. // set http header
  37. static void setHeader(String key, String value) {
  38. _dio.options.headers[key] = value;
  39. }
  40. // http get request with full url
  41. static Future<Response> getWithUrl(String url, {Map<String, dynamic> params}) async {
  42. return Dio().get(url, queryParameters: params);
  43. }
  44. // http post request with full url
  45. static Future<Response> postWithUrl(String url, {Map<String, dynamic> params}) async {
  46. return Dio().post(url, queryParameters: params);
  47. }
  48. // get remote version
  49. static Future<Version> getVersion() async {
  50. var response = await getWithUrl("https://qndownload.shotshock.shop/version?ts=${DateTime.now().millisecondsSinceEpoch}");
  51. var version = Version.fromJson(response.data);
  52. return version;
  53. }
  54. // base HTTP GET
  55. static Future<dynamic> get(String uri, {Map<String, dynamic> params}) async {
  56. try {
  57. Log.i("GET | $uri " + (params == null ? "" : params.toString()));
  58. var response = await _dio.get(uri, queryParameters: params);
  59. // var response = await compute(_request, RequestData(_dio, "GET", uri, data: params));
  60. var data = Resp.fromJson(response.data);
  61. return Future.value(process(data));
  62. } on DioError catch (err) {
  63. Log.e("DioError: $err URL: ${_dio.options.baseUrl}$uri");
  64. throw NetError("网络错误!");
  65. }
  66. }
  67. // base HTTP POST
  68. static Future<dynamic> post (String uri, {Map<String, dynamic> params}) async {
  69. try {
  70. Log.i("POST | $uri " + (params == null ? "" : params.toString()));
  71. var response = await _dio.post(uri, queryParameters: params);
  72. // var response = await compute(_request, RequestData(_dio, "POST", uri, data: params));
  73. var data = Resp.fromJson(response.data);
  74. return Future.value(process(data));
  75. } on DioError catch (err) {
  76. Log.e("DioError: $err URL: ${_dio.options.baseUrl}$uri");
  77. throw NetError("网络错误!");
  78. }
  79. }
  80. // process http response data
  81. static dynamic process(Resp response) {
  82. Log.i("rsp | ${response.msg} ${response.status}");
  83. if([410000, 410001, 410002].contains(response.status)) {
  84. Utils.toLogin();
  85. BotToast.showText(text: response.msg);
  86. throw NetError(response.msg);
  87. }
  88. if (response.status != 200) {
  89. Log.e("response ${response.toJson()}}");
  90. BotToast.showText(text: response.msg);
  91. throw NetError(response.msg);
  92. }
  93. return response.data;
  94. }
  95. }