mat*_*eoh 6 flutter flutter-go-router
在我的 Flutter 应用程序中,我使用go_router在页面之间导航。
以下是我的应用程序中的当前页面:
accounts_page
add_account_page
import_accounts_page
现在,我想在 内部实现嵌套导航add_account_page
,因此我可以使用多个步骤添加新帐户,比方说:
account_info_step
account_type_step
account_detail_step
这是我尝试过的:
final _navigatorKey = GlobalKey<NavigatorState>();
final _addAccountNavigatorKey = GlobalKey<NavigatorState>();
late final router = GoRouter(
navigatorKey: _navigatorKey,
initialLocation: "/accounts_page",
routes: [
ShellRoute(
navigatorKey: _addAccountNavigatorKey,
builder: (context, state, child) => AddAccountPage(child: child),
routes: [
GoRoute(
parentNavigatorKey: _addAccountNavigatorKey,
name: "account_info_step",
path: "/account_info_step",
builder: (context, state) => const AccountInfoStep(),
),
GoRoute(
parentNavigatorKey: _addAccountNavigatorKey,
name: "account_type_step",
path: "/account_type_step",
builder: (context, state) => const AccountTypeStep(),
),
GoRoute(
parentNavigatorKey: _addAccountNavigatorKey,
name: "account_detail_step",
path: "/account_detail_step",
builder: (context, state) => const AccountDetailStep(),
),
],
),
GoRoute(
name: "accounts_page",
path: "/accounts_page",
pageBuilder: (context, state) => const AccountsPage(),
),
GoRoute(
name: "import_accounts_page",
path: "/import_accounts_page",
pageBuilder: (context, state) => const ImportAccountsPage(),
),
],
);
Run Code Online (Sandbox Code Playgroud)
然后我打电话context.pushNamed("account_info_step")
,但没有任何反应。
那么是否可以使用go_router
在内部实现嵌套导航,add_account_page
如果可以,如何实现?
谢谢。
我认为您尝试创建嵌套导航的方式不正确。另外,您不需要使用 ShellRoute,如果您想创建类似持久底部导航栏的内容并仅更改子项,同时将底部导航栏保留在底部,则可以使用 shell 路由。
\nimport 'package:flutter/material.dart';\nimport 'package:go_router/go_router.dart';\nimport 'package:untitled/homepage.dart';\nimport 'package:untitled/test_page.dart';\n\nfinal _navigatorKey = GlobalKey<NavigatorState>();\n// final _addAccountNavigatorKey = GlobalKey<NavigatorState>();\n\nclass MyRouter{\n static final router = GoRouter(\n navigatorKey: _navigatorKey,\n initialLocation: "/accounts_page",\n routes: [\n GoRoute(\n name: "accounts_page",\n path: "/accounts_page",\n builder: (context, state) => const MyHomePage(),\n routes: <RouteBase>[\n GoRoute(\n name: "account_info_step",\n path: "account_info_step",\n builder: (context, state) => const TestPage(),\n ),\n GoRoute(\n name: "account_type_step",\n path: "account_type_step",\n builder: (context, state) => const TestPage(),\n ),\n GoRoute(\n name: "account_detail_step",\n path: "account_detail_step",\n builder: (context, state) => const TestPage(),\n ),\n ]\n ),\n ],\n );\n}\n
Run Code Online (Sandbox Code Playgroud)\n我想这就是您正在寻找的。另请注意,您不需要在嵌套屏幕的路径中添加“/”。\n要导航到这些嵌套屏幕,您可以执行某些操作
\n像这样:-
\ncontext.go('/accounts_page/account_info_step');\n
Run Code Online (Sandbox Code Playgroud)\n编辑:我已经理解您的要求,我认为这会有所帮助。\n仅在您的代码中,
\nGoRoute(\n name: "account_type_step",\n path: "account_type_step",\n builder: (context, state) => const TestPage(),\n ),\n
Run Code Online (Sandbox Code Playgroud)\n让\xe2\x80\x99s 说你不\xe2\x80\x99s 想要这个屏幕中的底部导航栏,有一个名为parentNavigatorKey 的参数。您可以使用 rootNavigator Key _navigatorKey 进行设置。
\nGoRoute(\n parentNavigatorKey: _navigatorKey,\n name: "account_type_step",\n path: "account_type_step",\n builder: (context, state) => const TestPage(), \n),\n
Run Code Online (Sandbox Code Playgroud)\n
如果您的目的是获得AccountInfoStep()
通往此构建器的完整路径,则应在您的情况下添加:
context.push("/accounts_page/account_info_step")
我假设您缺少name
代表正确嵌套的顶级路线以使用context.pushNamed()
归档时间: |
|
查看次数: |
9679 次 |
最近记录: |