关于文档,如果 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
);
}
}
为什么会这样?有没有办法实现这个目标?
您正确理解了文档。我遇到了同样的问题,我发现从 context.push(....) 切换到 context.go(...) 给了我想要的结果。希望这有帮助。