我正在使用go router插件为我的flutter web应用程序,但我没有找到任何方法在导航中进行推送替换。我们不仅可以推送替换,还可以做其他类型导航链接
"我的努力"
他们只是推下一页,而不是替换
注意:我希望在go路由器中使用此功能
ldioqlga1#
我以前也遇到过同样的问题。那么这种方法对我很有效。首先,你需要避免嵌套路线:
final GoRouter router = GoRouter( routes: <GoRoute>[ GoRoute( path: '/', builder: (BuildContext context, GoRouterState state) => const OnboardingScreen(), ), GoRoute( path: '/login', builder: (BuildContext context, GoRouterState state) => LoginScreen(), ), GoRoute( path: '/signup', builder: (BuildContext context, GoRouterState state) => const SignupScreen(), ), ], );
使用上面的代码,而不是像下面这样嵌套:
final GoRouter router = GoRouter( routes: <GoRoute>[ GoRoute( routes: <GoRoute>[ GoRoute( path: 'login', builder: (BuildContext context, GoRouterState state) => LoginScreen(), ), GoRoute( path: '/signup', builder: (BuildContext context, GoRouterState state) => const SignupScreen(), ), ], path: '/', builder: (BuildContext context, GoRouterState state) => const OnboardingScreen(), ), ], );
这将使您能够从上面的例子替换OnboardingScreen()。所以接下来您可以使用pushreplacement future与:
context.go("/routname");
或GoRouter.of(上下文).go(“/路由名称”);如果你不想替换,那么可以用途:
context.push("/routname");
或
GoRouter.of(context).push("/routname");
00jrzges2#
试试这个
Router.neglect(context, () { context .goNamed('third', params: {"id": ID}); });
它将忽略您当前的页面。希望这将帮助您
pgx2nnw83#
你可以用一种方式-〉
context.pop(); context.push(routeName);
添加这两个命令的工作方式与pushReplacement类似。
kgqe7b3p4#
您可以在Go Router中使用子路由重定向。假设您希望用户首先进入您的主页,然后从那里点击“登录”,进入“登录”页面,登录后进入“ Jmeter 板”页面。但是,当他们按下浏览器的后退按钮时,他们应该转到主页,而不是登录页面,即跳过登录页面,就像**“pushNameReplacement”**一样。然后,为了实现此目的,您可以配置每个LoginPage和Dashboard页面的重定向并获得此功能。您可以对其进行配置,以便每当用户(包括从浏览器的历史记录)转到 Jmeter 板链接时,它首先检查其是否已登录,然后打开,否则它将自动显示登录页面。
jvlzgdj95#
在go_router(5.1.10)的当前版本中,可以使用GoRouter.of(context).replace('/your-route)执行与Navigator.of(context).pushReplacement(yourPage)相同的操作。有一个PR可以添加popUntil,但flutter团队似乎不想支持命令式路由方法,而只关注声明式路由(请参见this issue)。这意味着the popUntil PR可能永远不会被合并,并且pushNamedAndRemoveUntil永远不会被支持。这还意味着push和replace将来可能会被删除。
go_router
5.1.10
GoRouter.of(context).replace('/your-route)
Navigator.of(context).pushReplacement(yourPage)
popUntil
pushNamedAndRemoveUntil
push
replace
5条答案
按热度按时间ldioqlga1#
我以前也遇到过同样的问题。那么这种方法对我很有效。首先,你需要避免嵌套路线:
使用上面的代码,而不是像下面这样嵌套:
这将使您能够从上面的例子替换OnboardingScreen()。所以接下来您可以使用pushreplacement future与:
或GoRouter.of(上下文).go(“/路由名称”);如果你不想替换,那么可以用途:
或
00jrzges2#
试试这个
它将忽略您当前的页面。希望这将帮助您
pgx2nnw83#
你可以用一种方式-〉
添加这两个命令的工作方式与pushReplacement类似。
kgqe7b3p4#
您可以在Go Router中使用子路由重定向。
假设您希望用户首先进入您的主页,然后从那里点击“登录”,进入“登录”页面,登录后进入“ Jmeter 板”页面。
但是,当他们按下浏览器的后退按钮时,他们应该转到主页,而不是登录页面,即跳过登录页面,就像**“pushNameReplacement”**一样。
然后,为了实现此目的,您可以配置每个LoginPage和Dashboard页面的重定向并获得此功能。
您可以对其进行配置,以便每当用户(包括从浏览器的历史记录)转到 Jmeter 板链接时,它首先检查其是否已登录,然后打开,否则它将自动显示登录页面。
jvlzgdj95#
在
go_router
(5.1.10
)的当前版本中,可以使用GoRouter.of(context).replace('/your-route)
执行与Navigator.of(context).pushReplacement(yourPage)
相同的操作。有一个PR可以添加
popUntil
,但flutter团队似乎不想支持命令式路由方法,而只关注声明式路由(请参见this issue)。这意味着the
popUntil
PR可能永远不会被合并,并且pushNamedAndRemoveUntil
永远不会被支持。这还意味着push
和replace
将来可能会被删除。