完成路由中间件处理

This commit is contained in:
胡天 2023-07-23 17:16:26 +08:00
parent ac67682918
commit 998f61dea7
6 changed files with 70 additions and 12 deletions

View File

@ -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;
}
}

View File

@ -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(),
),

View File

@ -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);
}
}

View File

@ -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);
}
}
}

View File

@ -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);
}

View File

@ -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(),
],
),
];
}