| 123456789101112131415161718192021222324252627282930313233 |
- import 'package:chicken_farm/core/utils/logger.dart';
- import 'package:flutter/material.dart';
- import 'package:go_router/go_router.dart';
- import 'package:flutter_riverpod/flutter_riverpod.dart';
- import 'package:chicken_farm/stores/auth_store.dart';
- import 'package:chicken_farm/routes/app_routes.dart';
- class RouteGuard {
- static String? redirectLogic(BuildContext context, GoRouterState state) {
- final container = ProviderScope.containerOf(context);
- final authState = container.read(authStoreProvider);
- final isGoingToLogin = state.matchedLocation == '/login';
- logger.d(
- "-- redirect -- path: ${state.matchedLocation} state: ${authState.state}",
- );
- if (authState.state == AuthState.loading) return null; // 加载中不跳转
- // 如果已经认证,且当前在登录页或启动页,则跳转到主页
- if (authState.state == AuthState.authenticated &&
- (isGoingToLogin || state.matchedLocation == '/')) {
- return AppRouteNames.home;
- }
- // 如果未认证,且不是前往登录页或启动页,则跳转到登录页
- if (authState.state != AuthState.authenticated &&
- !isGoingToLogin &&
- state.matchedLocation != '/') {
- return '/login';
- }
- return null;
- }
- }
|