flutter 转到路由器:使用GoRoute和ShellRoute

n53p2ov0  于 2022-12-24  发布在  Flutter
关注(0)|答案(1)|浏览(609)

使用GoRoute和ShellRoute处理路由的最佳方法是什么?
我有3个屏幕。设置-显示全屏A -显示底部导航(用 shell 路线包裹)B -显示底部导航(用 shell 路线包裹)
我在这个配置中遇到的唯一问题是当我进入设置屏幕时缺少一个后退按钮。我该如何修复它?

  1. final goRouter = GoRouter(
  2. initialLocation: '/a',
  3. navigatorKey: _rootNavigatorKey,
  4. routes: [
  5. GoRoute( // = Do not show Bottom Navigation, just a full screen
  6. path: '/settings',
  7. pageBuilder: (context, state) => const NoTransitionPage(
  8. child: SettingsPage(),
  9. ),
  10. ),
  11. ShellRoute( // ShellRoute = Show Bottom Navigation
  12. navigatorKey: _shellNavigatorKey,
  13. builder: (context, state, child) {
  14. return ScaffoldWithBottomNavigation(
  15. tabs: tabs,
  16. child: child,
  17. );
  18. },
  19. routes: [
  20. GoRoute(
  21. path: '/a',
  22. pageBuilder: (context, state) => const NoTransitionPage(
  23. child: HomeScreen(label: 'A', detailsPath: '/a/details'),
  24. ),
  25. routes: [
  26. GoRoute(
  27. path: 'details',
  28. builder: (context, state) => const DetailsScreen(label: 'A'),
  29. ),
  30. ],
  31. ),
  32. GoRoute(
  33. path: '/b',
  34. pageBuilder: (context, state) => const NoTransitionPage(
  35. child: HomeScreen(label: 'B', detailsPath: '/b/details'),
  36. ),
  37. routes: [
  38. GoRoute(
  39. path: 'details',
  40. builder: (context, state) => const DetailsScreen(label: 'B'),
  41. ),
  42. ],
  43. ),
  44. ],
  45. ),
  46. ],
  47. );
s6fujrry

s6fujrry1#

要有一个后退按钮有2个路径,你可以遵循。
1.使用push而不是go:
如果您使用,请按“后退”按钮返回上一页。
1.使用转到子路径,因此您的病例设置页面需要是另一页面的子路径,如果用户可以访问设置的路径有多个,则可能不可行。
因此,我建议在导航到设置页面时使用推送

相关问题