【发布时间】:2019-10-17 02:51:53
【问题描述】:
我有这个初始化状态方法:
@override
void initState() {
super.initState();
getNumber(index).then((number) {
if (number> 1000) {
number = number/ 1000;
setState(() {
flag = true;
_num = number.toInt().toString();
});
} else {
setState(() {
_num = number.toInt().toString();
});
}
});
}
我得到了这个错误:
如果您在 State 对象上调用 setState() 不再出现在小部件树中的小部件(例如,其父 小部件不再在其构建中包含小部件)。这个错误可以 当代码从计时器或动画调用 setState() 时发生 打回来。首选的解决方案是取消计时器或停止 在 dispose() 回调中收听动画。另一种解决方案 是在调用之前检查这个对象的“mounted”属性 setState() 以确保对象仍在树中。
如果调用 setState(),此错误可能表示内存泄漏 因为另一个对象正在保留对此 State 对象的引用 从树上移除后。为了避免内存泄漏, 考虑在 dispose() 期间中断对该对象的引用。
我如何正确使用 dispose?
【问题讨论】:
-
您可以在 setState 之前使用 if(monunted) 以避免在您的小部件不在小部件树中时调用 setState if(monunted){ setState((){}); }
-
所以实际上我应该在我的应用程序中的每个 setState 之前使用它?
-
如果您正在导航哪些更改小部件树,则不仅在异步函数中