为什么Flutter GoRouter会忽略pageKey

问题描述 投票:0回答:1

关于文档,如果 Flutter 识别到相同的键,它将更新 url 并保留页面(Widget)。在下面的代码中,pageKey 是在两个容器中设置的静态常量值。当在这两个路由(/home 和 /home/login)之间导航时,Flutter 会忽略它是相同的小部件并重新创建它。

class ProjectXApp extends StatelessWidget {

  ProjectXApp({Key? key}) : super(key: key);

  static const pageKey = ValueKey("Home");

  final _router = GoRouter(
    routes: [
      GoRoute(
        path: '/',
        redirect: (_) => Routes.routeHome,
      ),
      GoRoute(
        path: '/home',
        builder: (context, state) {
          return Container(key: pageKey);
        }
      ),
      GoRoute(
          path: "/home/login",
          builder: (context, state) {
            return Container(key: pageKey);
          }
      )
    ],
  );

  @override
  Widget build(BuildContext context) {
    return MaterialApp.router(
        routeInformationParser: _router.routeInformationParser,
        routerDelegate: _router.routerDelegate
    );
  }
}

为什么会这样?有没有办法实现这个目标?

flutter url browser navigation
1个回答
0
投票

您正确理解了文档。我遇到了同样的问题,我发现从 context.push(....) 切换到 context.go(...) 给了我想要的结果。希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.