如何正确重定向到路由?
我的应用程序必须有一些路由安全性,我试图用GoRouter来做,但它总是执行一个重定向,并总是返回到主页。
只有3个安全路由(配置文件,订单,收藏夹),如果您没有登录,您必须返回登录。
但是当我把3个路由中的任何一个放在url中时,它会将我重定向到登录,并立即重定向到主页(这是不应该发生的事情)
有人能帮帮我吗?我改变了几次逻辑,但我总是回到同一点。
class AppRouter {
final SessionCubit sessionCubit;
GoRouter get router => _goRouter;
AppRouter(this.sessionCubit);
late final GoRouter _goRouter = GoRouter(
refreshListenable: GoRouterRefreshStream(sessionCubit.stream),
initialLocation: APP_PAGE.home.toPath,
routes: <GoRoute>[
GoRoute(
path: APP_PAGE.home.toPath,
name: APP_PAGE.home.toName,
builder: (context, state) => MyHomePage(),
),
GoRoute(
path: APP_PAGE.login.toPath,
name: APP_PAGE.login.toName,
builder: (context, state) => const LoginPage(),
),
GoRoute(
path: APP_PAGE.profile.toPath,
name: APP_PAGE.profile.toName,
builder: (context, state) => MyProfile(),
),
GoRoute(
path: APP_PAGE.page1.toPath,
name: APP_PAGE.page1.toName,
builder: (context, state) => const Page1(),
),
GoRoute(
path: APP_PAGE.error.toPath,
name: APP_PAGE.error.toName,
builder: (context, state) => ErrorPage(error: state.extra.toString()),
),
GoRoute(
path: APP_PAGE.page2.toPath,
name: APP_PAGE.page2.toName,
builder: (context, state) => const Page2(),
),
],
debugLogDiagnostics: true,
errorBuilder: (context, state) => ErrorPage(error: state.error.toString()),
redirect: (context, state) {
final userAutheticated = sessionCubit.state is Authenticated;
if (userAutheticated) {
if (state.subloc == '/login') return '/home';
if (state.subloc == '/profile') return '/profile';
if (state.subloc.contains('/page1')) return '/page1';
return '/home';
} else {
if (state.subloc == '/home') {
return '/home';
}
if (state.subloc == '/page2') {
return '/page2';
} else {
return '/login';
}
}
},
);
}
***更新05/11***我找到了解决方案。
First-〉使用go_router 5.1.5的最新版本(重定向问题在旧版本上)。
第二步-〉修改重定向逻辑:
if(!userAutheticated && !onloginPage && !onpublicPage1 && !onPublicPage2 && !onPublicPageN){
return '/login';
}
if (userAutheticated && onloginPage) {
return '/home';
}
//you must include this. so if condition not meet, there is no redirect
return null;
注意:我不知道为什么flutter web调试模式不能正常工作。所以我在发布模式下运行项目,瞧,它工作了!
非常感谢您的帮助!!!
3条答案
按热度按时间enxuqcxy1#
将
initialLocation
更改为登录kmpatx3s2#
只要检查你的用户是否通过了身份验证并且不在登录页面,然后重定向。如果你的用户已经登录,你不需要重定向:
kse8i1jr3#
以下链接中的示例可以帮助您解决此问题;
go_router