GoRouter跳转至其他页面时触发当前页面不必要重建的问题求助
GoRouter跳转至其他页面时触发当前页面不必要重建的问题求助
最近在使用GoRouter开发Flutter应用时碰到了一个很困扰的问题,想跟大家请教下解决方案。
情况是这样的:我在Widget的build方法里调用了GoRouterState.of(context)来获取路由状态,比如从extras里拿参数,这部分在进入页面时工作正常。但当我调用goNamed("somewhere-else")跳转到其他页面时,当前页面的build方法居然会被重新触发一次,导致了不必要的重建。
举个具体的例子,我有这样一个页面组件:
class PageOne extends WatchingStatefulWidget { const PageOne({super.key}); @override GameViewState createState() => PageOneState(); } class PageOneState extends State<PageOne> { @override Widget build(BuildContext context) { print("building page one"); final _ = GoRouterState.of(context); // 这里会从extras里拿参数并处理业务逻辑 return ...; } }
当我第一次跳转到/page-one时,日志正常输出building page one;但当我调用goNamed("somewhere-else")跳转到/page-two时,日志里居然会先打印一次building page one,再打印building page two,就像这样:
[GoRouter] going to /page-one flutter: building page one [GoRouter] going to /page-two flutter: building page one flutter: building page two
这种情况会导致应用出现状态不一致的问题:模型层已经确认用户已经跳转到新页面了,但原来的页面还在执行重建逻辑,会在错误的状态下尝试构建,进而引发各种奇怪的问题。
想请问下各位,有没有办法阻止当前页面在跳转到其他页面时被触发重建呢?
内容来源于stack exchange
相关产品推荐
相关产品推荐

