【发布时间】:2019-08-30 03:12:55
【问题描述】:
每次我离开一个小部件,然后返回到它时,我都会收到对该小部件的 initState 方法的“n+1”调用。
我的设置与此类似。我从小部件 A 开始,当识别到对卡片的单击时,我们执行 Navigator.pushNamed(B.routeName) 以显示该项目的详细信息屏幕。一旦完成一些额外的处理,用户点击 B 上的“提交”按钮,然后返回到带有Navigator.pushNamed(A.routeName) 的 a。
class A extends StatefulWidget {
static String routeName = 'aroutename';
A({Key key}) : super(key: key);
_AState createState() => _AState();
}
class _AState extends State<A> {
@override
void initState() {
super.initState();
getSomeDataForScreenA().then((result) => setState(...));
}
whenDone(){
Navigator.of(context).pushNamed(B.routeName);
}
@override
Widget build(BuildContext context) {
return Container(
);
}
}
class B extends StatefulWidget {
B({Key key}) : super(key: key);
_BState createState() => _BState();
}
class _BState extends State<B> {
static String routeName = 'broutename';
@override
void initState() {
super.initState();
getSomeDataForScreenB().then((result) => setState(...));
}
whenDone(){
Navigator.of(context).pushNamed(A.routeName);
}
@override
Widget build(BuildContext context) {
return Container(
);
}
}
我们第一次看到 A 时,它只运行一次很好。然后我们去 B,然后一旦我们回到 A,initState() 就会被调用两次。我们第三次做这个循环,它被称为 3 次,等等......
希望有人可以在这里指出我做错了什么的正确方向。我知道这可能是由于缺乏对Navigator.of(context) 内部工作原理的了解,但我似乎无法在任何地方找到答案。
【问题讨论】:
-
完成后为什么不直接使用 Navigator pop?