route_guard.dart 1.2 KB

123456789101112131415161718192021222324252627282930313233
  1. import 'package:chicken_farm/core/utils/logger.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:go_router/go_router.dart';
  4. import 'package:flutter_riverpod/flutter_riverpod.dart';
  5. import 'package:chicken_farm/stores/auth_store.dart';
  6. import 'package:chicken_farm/routes/app_routes.dart';
  7. class RouteGuard {
  8. static String? redirectLogic(BuildContext context, GoRouterState state) {
  9. final container = ProviderScope.containerOf(context);
  10. final authState = container.read(authStoreProvider);
  11. final isGoingToLogin = state.matchedLocation == '/login';
  12. logger.d(
  13. "-- redirect -- path: ${state.matchedLocation} state: ${authState.state}",
  14. );
  15. if (authState.state == AuthState.loading) return null; // 加载中不跳转
  16. // 如果已经认证,且当前在登录页或启动页,则跳转到主页
  17. if (authState.state == AuthState.authenticated &&
  18. (isGoingToLogin || state.matchedLocation == '/')) {
  19. return AppRouteNames.home;
  20. }
  21. // 如果未认证,且不是前往登录页或启动页,则跳转到登录页
  22. if (authState.state != AuthState.authenticated &&
  23. !isGoingToLogin &&
  24. state.matchedLocation != '/') {
  25. return '/login';
  26. }
  27. return null;
  28. }
  29. }