From 3dd583a278592ad14430939756e855dc511b85e6 Mon Sep 17 00:00:00 2001 From: userGyl Date: Tue, 3 Feb 2026 10:59:05 +0800 Subject: [PATCH] =?UTF-8?q?401=E5=A2=9E=E5=8A=A0=E8=8A=82=E6=B5=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ln_jq_app/lib/common/AuthGuard.dart | 22 ++++++++++++++++++++++ ln_jq_app/lib/main.dart | 6 +++--- 2 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 ln_jq_app/lib/common/AuthGuard.dart diff --git a/ln_jq_app/lib/common/AuthGuard.dart b/ln_jq_app/lib/common/AuthGuard.dart new file mode 100644 index 0000000..e0e269c --- /dev/null +++ b/ln_jq_app/lib/common/AuthGuard.dart @@ -0,0 +1,22 @@ +import 'package:getx_scaffold/common/index.dart'; +import 'package:ln_jq_app/pages/login/view.dart'; +import 'package:ln_jq_app/storage_service.dart'; + +class AuthGuard { + static bool _handling401 = false; + + static Future handle401(String? message) async { + if (_handling401) return; + _handling401 = true; + + try { + await StorageService.to.clearLoginInfo(); + Get.offAll(() => const LoginPage()); + } finally { + // 防止意外卡死,可视情况是否延迟重置 + Future.delayed(const Duration(seconds: 1), () { + _handling401 = false; + }); + } + } +} diff --git a/ln_jq_app/lib/main.dart b/ln_jq_app/lib/main.dart index 5872e63..8be4e38 100644 --- a/ln_jq_app/lib/main.dart +++ b/ln_jq_app/lib/main.dart @@ -3,6 +3,7 @@ import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_native_splash/flutter_native_splash.dart'; import 'package:get_storage/get_storage.dart'; import 'package:getx_scaffold/getx_scaffold.dart'; +import 'package:ln_jq_app/common/AuthGuard.dart'; import 'package:ln_jq_app/common/model/base_model.dart'; import 'package:ln_jq_app/common/token_interceptor.dart'; import 'package:ln_jq_app/storage_service.dart'; @@ -20,7 +21,7 @@ void main() async { logTag: '小羚羚', supportedLocales: [const Locale('zh', 'CN')], ); - + // 保持原生闪屏页,直到 WelcomeController 调用 remove() FlutterNativeSplash.preserve(widgetsBinding: widgetsBinding); @@ -73,8 +74,7 @@ void initHttpSet() { if (baseModel.code == 0 || baseModel.code == 200) { return null; } else if (baseModel.code == 401) { - await StorageService.to.clearLoginInfo(); - Get.offAll(() => const LoginPage()); + await AuthGuard.handle401(baseModel.message); return baseModel.message; } else { return (baseModel.error.toString()).isEmpty