我试图实现一个页面,底部导航和应用程序栏是固定的。但当我按下一个按钮,它会转到另一个页面,而不重新创建应用程序栏和底部导航栏。路由我使用go_router包。使用Navigator here有一个答案。但是有没有什么方法可以使用go_router来实现呢?
示例页面:
示例主页:
xqk2d5yq1#
这个问题在正式版本中还没有解决,但是你可以在https://github.com/flutter/packages/pull/2650中查看这个正在进行中的工作,这样就完美地解决了这个问题,希望它能很快被合并🤞🤞
j7dteeu82#
ShellRouter
GoRouter
final _rootNavigatorKey = GlobalKey<NavigatorState>(); final _shellNavigatorKey = GlobalKey<NavigatorState>(); final router = GoRouter( initialLocation: '/', navigatorKey: _rootNavigatorKey, routes: [ ShellRoute( navigatorKey: _shellNavigatorKey, pageBuilder: (context, state, child) { print(state.location); return NoTransitionPage( child: ScaffoldAppAndBottomBar(child: child)); }, routes: [ GoRoute( parentNavigatorKey: _shellNavigatorKey, path: '/home', pageBuilder: (context, state) { return NoTransitionPage( child: Scaffold( body: const Center( child: Text("Home"), ), ), ); }, ), GoRoute( path: '/', parentNavigatorKey: _shellNavigatorKey, pageBuilder: (context, state) { return const NoTransitionPage( child: Scaffold( body: Center(child: Text("Initial")), ), ); }, ), ], ), ], );
class ScaffoldAppAndBottomBar extends StatelessWidget { Widget child; ScaffoldAppAndBottomBar({super.key, required this.child}); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( centerTitle: true, title: const Text( "App Bar", ), backgroundColor: Colors.amber, ), body: SafeArea(child: child), bottomNavigationBar: Container( color: Colors.blue, height: 56, width: double.infinity, child: const Center(child: Text("Bottom Navigation Bar")), ), floatingActionButton: FloatingActionButton( backgroundColor: Colors.red, onPressed: () { context.go('/home'); }, child: const Icon(Icons.home), )); } }
ShellRoute
2条答案
按热度按时间xqk2d5yq1#
这个问题在正式版本中还没有解决,但是你可以在https://github.com/flutter/packages/pull/2650中查看这个正在进行中的工作,这样就完美地解决了这个问题,希望它能很快被合并🤞🤞
j7dteeu82#
将
ShellRouter
与GoRouter
配合使用以满足您的要求!工艺路线
脚手架应用程序和底栏
输出:
最初
按下浮动按钮后
ShellRoute
和GoRouter
here参考底部导航栏的详细代码和说明 *