123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- import 'dart:io';
- import 'package:dio/dio.dart';
- import 'package:flutter/material.dart';
- import 'package:go_router/go_router.dart';
- import 'package:maxkey_flutter/maxkey/services/authn.service.dart';
- import 'package:maxkey_flutter/maxkey/services/image_captcha.service.dart';
- import 'package:maxkey_flutter/maxkey/services/time_based.service.dart';
- import 'package:maxkey_flutter/maxkey/services/users.service.dart';
- import 'package:maxkey_flutter/persistent.dart';
- import 'package:maxkey_flutter/utils.dart';
- /// 会在需要刷新的时候通知
- class MaxKey with ChangeNotifier {
- final _dio = Dio(BaseOptions(
- baseUrl: MaxKeyPersistent.instance.baseUrl,
- connectTimeout: const Duration(seconds: 10),
- ));
- late final authnService = AuthnService(_dio);
- late final imageCaptchaService = ImageCaptchaService(_dio);
- late final timeBasedService = TimeBasedService(_dio);
- late final usersService = UsersService(_dio);
- static MaxKey? _instance;
- static MaxKey get instance {
- _instance ??= MaxKey._();
- return _instance!;
- }
- MaxKey._() {
- _dio.interceptors.add(InterceptorsWrapper(
- onResponse: (response, handler) {
- final cookies = response.headers[HttpHeaders.setCookieHeader];
- if (cookies != null) {
- maxKeyCookies = List.from(cookies);
- }
- handler.next(response);
- },
- onError: (error, handler) {
- LOGGER.e("InterceptorsWrapper.onError(): ");
- LOGGER.e(error.type);
- LOGGER.e(error.response);
- if (error.type == DioExceptionType.badResponse) {
- SCAFFOLD_MESSENGER_KEY.currentState?.showSnackBar(
- SnackBar(
- content: const Text("登陆状态过期。请重新登陆"),
- action: SnackBarAction(
- label: "重新登陆",
- onPressed: () async {
- _dio.options.headers.remove(HttpHeaders.authorizationHeader);
- await MaxKeyPersistent.instance.clearToken();
- NAVIGATOR_KEY.currentContext?.pushReplacement(
- RoutePath.loginPage,
- );
- },
- ),
- ),
- );
- }
- handler.next(error);
- },
- ));
- }
- void updateBaseUrl() {
- LOGGER.i("MaxKey.updateBaseUrl(): ");
- LOGGER.i("old baseUrl: ${_dio.options.baseUrl}");
- _dio.options.baseUrl = MaxKeyPersistent.instance.baseUrl;
- LOGGER.i("new baseUrl: ${_dio.options.baseUrl}");
- notifyListeners();
- }
- List<String> maxKeyCookies = [];
- Future<bool> maxKeyNetworkTest({String? host}) async {
- try {
- LOGGER.i("MaxKey.maxKeyNetworkTest(): ");
- LOGGER.i(
- "[MaxKeyNetworkTest] GET: ${host == null ? MaxKeyPersistent.instance.baseUrl : "http://$host/sign"}",
- );
- await _dio
- .get(host == null
- ? MaxKeyPersistent.instance.baseUrl
- : "http://$host/sign")
- .timeout(const Duration(seconds: 5));
- LOGGER.i("MaxKeyNetworkTest: true");
- return true;
- } catch (err) {
- LOGGER.e("MaxKey.maxKeyNetworkTest(): ");
- LOGGER.e(err);
- }
- LOGGER.i("MaxKeyNetworkTest: false");
- return false;
- }
- }
|