route_guard.dart 1.1 KB

12345678910111213141516171819202122232425262728293031
  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. class RouteGuard {
  7. static String? redirectLogic(BuildContext context, GoRouterState state) {
  8. final container = ProviderScope.containerOf(context);
  9. final authState = container.read(authStoreProvider);
  10. final isGoingToLogin = state.matchedLocation == '/login';
  11. logger.d(
  12. "-- redirect -- path: ${state.matchedLocation} state: ${authState.state}",
  13. );
  14. if (authState.state == AuthState.loading) return null; // 加载中不跳转
  15. // // 如果已经认证,且当前不在主页,则跳转到主页
  16. // if (authState.state == AuthState.authenticated && isGoingToLogin) {
  17. // return '/home';
  18. // }
  19. // 如果未认证,且不是前往登录页或启动页,则跳转到登录页
  20. if (authState.state != AuthState.authenticated &&
  21. !isGoingToLogin &&
  22. state.matchedLocation != '/') {
  23. return '/login';
  24. }
  25. return null;
  26. }
  27. }