Flutter路由守卫 #
一、路由守卫概念 #
1.1 什么是路由守卫 #
路由守卫用于在页面跳转前进行权限检查,如登录验证。
二、实现方式 #
2.1 onGenerateRoute实现 #
dart
class RouteGuard {
static Route<dynamic>? onGenerateRoute(RouteSettings settings) {
if (requiresAuth(settings.name) && !isAuthenticated()) {
return MaterialPageRoute(
builder: (context) => LoginPage(),
settings: settings,
);
}
return _getRoute(settings);
}
static bool requiresAuth(String? route) {
return ['/profile', '/settings'].contains(route);
}
static bool isAuthenticated() {
return AuthService.isLoggedIn;
}
}
MaterialApp(
onGenerateRoute: RouteGuard.onGenerateRoute,
)
2.2 NavigatorObserver实现 #
dart
class AuthObserver extends NavigatorObserver {
@override
void didPush(Route route, Route? previousRoute) {
if (_requiresAuth(route.settings.name) && !_isAuthenticated()) {
navigator?.pushReplacementNamed('/login');
}
}
}
MaterialApp(
navigatorObservers: [AuthObserver()],
)
三、总结 #
3.1 实现方式 #
| 方式 | 说明 |
|---|---|
| onGenerateRoute | 路由生成时拦截 |
| NavigatorObserver | 监听路由变化 |
3.2 下一步 #
让我们学习 HTTP请求!
最后更新:2026-03-28