为什么在Flutter中调用Navigator.of(context).pushNamed(..)时小部件会被构建两次?

7
下面的TestWidget类中的build函数在导航代码执行时被调用两次。 Test Widget在控制台上打印了两次。 有人知道原因吗?
 class TestWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    print("Test Widget");
    return new Scaffold(body: new Text("TEST WIDGET"),);
  }
}

导航代码:
   Navigator.of(context).pushNamed(AppRoutes.fieldData);`

路由定义:

  AppRoutes.fieldData: (context) {
           return new TestWidget(); 
  },
1个回答

5
这是由于动画效果导致的。
当路由被拖动时,页面内容会被构建为要进行渲染并进行动画处理的状态,然后在其落到位之后,又会被重新构建。
您可以通过在构建函数中设置调试断点并尝试访问此类路由来清楚地看到它:当路由准备进入但尚未可见时,它将首先停止,然后再在其落到位后停止。

5
有没有办法防止它运行两次? - John Joe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接