我有一个Flutter Web应用程序,有一个自定义的侧导航栏,显示在每一页上。因此,我可以始终显示相同的侧边导航栏,同时仍然保持URL导航,我使用了go_router
包,所有页面都在ShellRoute
中。现在我想滑动过渡到当前一个和签证诗句下面的导航项。我如何才能做到这一点?
下面是我代码的一个简化版本
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp.router(
routerConfig: GoRouter(
initialLocation: "/dash",
routes: [
ShellRoute(
builder: (context, state, child) => SideNavBarPage(subPage: child),
routes: [
GoRoute(
path: '/dash',
builder: (context, state) => DashPage(),
),
GoRoute(
path: '/other',
builder: (context, state) => OtherPage(),
),
GoRoute(
path: '/another',
builder: (context, state) => AnotherPage(),
),
],
),
],
),
);
}
}
class SideNavBarPage extends StatelessWidget {
final Widget subPage;
const SideNavBarPage({
required this.subPage,
super.key,
});
@override
Widget build(BuildContext context) {
return Scaffold(
body: Row(
children: [
CustomSideNavBar(
items: [
CustomSideNavBarItem(onTap: () => context.go("/dash")),
CustomSideNavBarItem(onTap: () => context.go("/other")),
CustomSideNavBarItem(onTap: () => context.go("/another")),
],
),
Expanded(child: subPage),
],
),
);
}
}
例如:如果我想从/another
切换到/dash
,我想从上到下转换,而从/dash
切换到/other
,我想从下到上向上滑动。
2条答案
按热度按时间yv5phkfx1#
更新(推荐):
我现在已经制定了一套解决这个问题的方案。使用这个go_router_tabs包,解决方案简单得多,只需要几行额外的代码:
此解决方案消除了对全局控制器的需要。该包还可以处理嵌套的导航栏设置,并且无论当前路径嵌套有多深以及用户如何到达那里,都将始终知道选择了哪个导航项。
原始答案(不再推荐):
首先,让我们创建一个控制器,用于更新导航栏中的选定选项卡。因此,它将能够计算滑动过渡的方向:
通过将控制器的
redirect
方法添加到GoRouter
中,我们可以使导航栏在每次导航到新页面时更新:这是一个带有导航轨道的示例页面:
这是导航栏旁边显示的示例页面。
现在让我们创建一个
GoRouter
CustomTransitionPage
,让我们控制幻灯片过渡的方向:现在,我们可以在
MyApp
中添加路由到GoRouter
:q9yhzks02#
使用auto_route: ^7.1.0在flutter中导航,它有transitionBuilder,这样你就可以简单地在页面之间启用过渡动画。
例如: