From 998f61dea77bd8e432c6d749631952ae14837725 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E5=A4=A9?= Date: Sun, 23 Jul 2023 17:16:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E8=B7=AF=E7=94=B1=E4=B8=AD?= =?UTF-8?q?=E9=97=B4=E4=BB=B6=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/data/services/user.dart | 4 ++- lib/main.dart | 3 +-- lib/middlewares/router_auth.dart | 30 +++++++++++++++++++++ lib/middlewares/router_welcome.dart | 27 +++++++++++++++++++ lib/modules/sign_in/sign_in_controller.dart | 4 +-- lib/routes/app_pages.dart | 14 +++++----- 6 files changed, 70 insertions(+), 12 deletions(-) create mode 100644 lib/middlewares/router_auth.dart create mode 100644 lib/middlewares/router_welcome.dart diff --git a/lib/data/services/user.dart b/lib/data/services/user.dart index acbeb79..19f4662 100644 --- a/lib/data/services/user.dart +++ b/lib/data/services/user.dart @@ -12,12 +12,13 @@ class UserService extends GetxService { // 是否登录 var _isLogin = false.obs; - // 令牌 token String token = ""; // 用户 profile var _profile = UserLoginResponse().obs; + bool get isLogin => _isLogin.value; // 令牌 token + UserLoginResponse get profile => _profile.value; bool get hasToken => token.isNotEmpty; @override @@ -27,6 +28,7 @@ class UserService extends GetxService { var profileOffline = StorageService.to.getString(StorageUserProfileKey); if (profileOffline.isNotEmpty) { _profile(UserLoginResponse.fromJson(jsonDecode(profileOffline))); + _isLogin.value = true; } } diff --git a/lib/main.dart b/lib/main.dart index 04d1d66..583c277 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -34,8 +34,7 @@ class MyApp extends StatelessWidget { title: 'News', debugShowCheckedModeBanner: false, theme: AppTheme.light, - // initialRoute: AppRoutes.Initial, - initialRoute: AppRoutes.Application, + initialRoute: AppRoutes.Initial, getPages: AppPages.pages, builder: EasyLoading.init(), ), diff --git a/lib/middlewares/router_auth.dart b/lib/middlewares/router_auth.dart new file mode 100644 index 0000000..89c21e9 --- /dev/null +++ b/lib/middlewares/router_auth.dart @@ -0,0 +1,30 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:news_getx/data/services/user.dart'; +import 'package:news_getx/routes/app_pages.dart'; + +/// 检查是否登录 +class RouteAuthMiddleware extends GetMiddleware { + // priority 数字小优先级高 + @override + int? priority = 0; + + RouteAuthMiddleware({this.priority}); + + @override + RouteSettings? redirect(String? route) { + // 如果已登录或者访问的页面是无需登录的则不处理 + if (UserService.to.isLogin || + route == AppRoutes.Signin || + route == AppRoutes.Signup || + route == AppRoutes.Initial) { + return null; + } + + Future.delayed( + Duration(seconds: 1), + () => Get.snackbar("提示", "登录过期,请重新登录"), + ); + return RouteSettings(name: AppRoutes.Signin); + } +} diff --git a/lib/middlewares/router_welcome.dart b/lib/middlewares/router_welcome.dart new file mode 100644 index 0000000..a8c63b2 --- /dev/null +++ b/lib/middlewares/router_welcome.dart @@ -0,0 +1,27 @@ +import 'package:flutter/material.dart'; + +import 'package:get/get.dart'; +import 'package:news_getx/data/services/config.dart'; +import 'package:news_getx/data/services/user.dart'; +import 'package:news_getx/routes/app_pages.dart'; + + +/// 第一次欢迎页面 +class RouteWelcomeMiddleware extends GetMiddleware { + // priority 数字小优先级高 + @override + int? priority = 0; + + RouteWelcomeMiddleware({this.priority}); + + @override + RouteSettings? redirect(String? route) { + if (ConfigService.to.isFirstOpen == true) { + return null; + } else if (UserService.to.isLogin == true) { + return RouteSettings(name: AppRoutes.Application); + } else { + return RouteSettings(name: AppRoutes.Signin); + } + } +} \ No newline at end of file diff --git a/lib/modules/sign_in/sign_in_controller.dart b/lib/modules/sign_in/sign_in_controller.dart index b57c517..e2cb7da 100644 --- a/lib/modules/sign_in/sign_in_controller.dart +++ b/lib/modules/sign_in/sign_in_controller.dart @@ -21,7 +21,6 @@ class SignInController extends GetxController { // 跳转 注册界面 handleNavSignUp() { - // TODO 注册页面 Get.toNamed(AppRoutes.Signup); } @@ -48,8 +47,9 @@ class SignInController extends GetxController { ); UserLoginResponse response = await repository.login(request); - + // 设置令牌和用户信息 UserService.to.saveProfile(response); + UserService.to.setToken(response.accessToken!); Get.offAndToNamed(AppRoutes.Application); } diff --git a/lib/routes/app_pages.dart b/lib/routes/app_pages.dart index c559bdc..e99f0bd 100644 --- a/lib/routes/app_pages.dart +++ b/lib/routes/app_pages.dart @@ -1,4 +1,6 @@ import 'package:get/get.dart'; +import 'package:news_getx/middlewares/router_auth.dart'; +import 'package:news_getx/middlewares/router_welcome.dart'; import 'package:news_getx/modules/application/application_binding.dart'; import 'package:news_getx/modules/application/application_page.dart'; import 'package:news_getx/modules/category/category_binding.dart'; @@ -22,6 +24,7 @@ abstract class AppPages { name: AppRoutes.Initial, page: () => WelcomePage(), binding: WelcomeBinding(), + middlewares: [RouteWelcomeMiddleware()], ), GetPage( name: AppRoutes.Signin, @@ -43,13 +46,10 @@ abstract class AppPages { name: AppRoutes.Application, page: () => ApplicationPage(), binding: ApplicationBinding(), - bindings: [MainBinding(), CategoryBinding()] - ), - // 分类页 - GetPage( - name: AppRoutes.Category, - page: () => CategoryPage(), - binding: CategoryBinding(), + bindings: [MainBinding(), CategoryBinding()], + middlewares: [ + RouteAuthMiddleware(), + ], ), ]; }