我构建了一个使用 flutter_bloc 的应用程序。我想使用 go_router 进行导航。但是对于动态路由,我如何将 GoRouter refreshListener 参数与 flutter_bloc 一起使用
GoRouter(
routes: [
GoRoute(
path: '/',
name: 'home',
pageBuilder: (context, state) => HomePage.page(),
),
GoRoute(
path: '/login',
name: 'login',
pageBuilder: (context, state) => LoginPage.page(),
),
],
redirect: (state) {
final isLoggedIn =
bloc.state.status == AuthenticationStatus.authenticated;
final isLoggingIn = state.location == '/login';
if (!isLoggingIn && !isLoggingIn) return '/login';
if (isLoggedIn && isLoggingIn) return "/";
return null;
},
refreshListenable:
);
Run Code Online (Sandbox Code Playgroud) 在我的 Flutter 应用程序中,我使用该go_router
包来管理路由和Firebase Authentication
用户身份验证。我有几个屏幕需要用户经过身份验证才能访问,例如帐户管理、交易和详细信息。
目前,我已经实现了重定向,go_router
以确保未经身份验证的用户被正确重定向。但是,当用户已经位于这些屏幕之一并注销或会话过期时,我面临着挑战。
我正在考虑使用 BlocListener 来检测每个屏幕上身份验证状态的变化,但这似乎会导致代码重复。由于 Firebase 身份验证,我还有一个 Stream 通知身份验证状态的更改,并更新变量contex.isUserSignIn
。
使用 go_router 和 Firebase 身份验证有效处理 Flutter 中的注销或会话过期事件的最佳实践是什么?
firebase-authentication flutter gorouter flutter-navigation flutter-go-router
我怎样才能正确重定向到路线?
\n我的应用程序必须具有一定的路由安全性,我尝试使用 GoRouter\n 来做到这一点,但它总是执行一次重定向并总是返回到主页。
\n只有 3 条安全路径(个人资料、订单、收藏夹),如果您尚未登录,则必须返回登录。
\n但是当我将 3 个路由中的任何一个放入 url 时,它会将我重定向到登录名并立即到主页(这是不应该发生的情况)
\n有人可以帮助我吗?\n我多次改变了逻辑,但我总是回到同一点。
\nclass AppRouter {\n final SessionCubit sessionCubit;\n\n GoRouter get router => _goRouter;\n\n AppRouter(this.sessionCubit);\n\n late final GoRouter _goRouter = GoRouter(\n refreshListenable: GoRouterRefreshStream(sessionCubit.stream),\n initialLocation: APP_PAGE.home.toPath,\n routes: <GoRoute>[\n GoRoute(\n path: APP_PAGE.home.toPath,\n name: APP_PAGE.home.toName,\n builder: (context, state) => MyHomePage(),\n ),\n GoRoute(\n path: APP_PAGE.login.toPath,\n name: APP_PAGE.login.toName,\n builder: (context, state) => const LoginPage(),\n ),\n GoRoute(\n path: APP_PAGE.profile.toPath,\n name: APP_PAGE.profile.toName,\n builder: (context, state) => MyProfile(),\n ),\n GoRoute(\n path: APP_PAGE.page1.toPath,\n name: …
Run Code Online (Sandbox Code Playgroud)