假设我们在如下视图中将侦听器添加到changeNotifier对象:
someChangeNotifierObject.addListener((){ if (this.mounted) setState(){}});
答案 0 :(得分:0)
如果将侦听器添加到超级对象(位于当前状态之外的对象)并且在侦听器内部使用setState-在这种情况下,应应在当前对象上将其明确删除国家处置。
否则,当对象通知其侦听器时,setState将引发异常,因为到那时您已在其中添加侦听器的状态已经被处置。
请勿在{{1}}中使用内联函数。如果您需要addListener
-可以在mounted
的任何地方访问它,但静态方法除外。因此,只需在当前State类内部创建一个新函数。
例如
State
但是,无论您是否在监听器内部使用@override
void initState() {
super.initState();
someChangeNotifierObject.addListener(myListenerFunc);
}
@override
void dispose() {
someChangeNotifierObject.removeListener(myListenerFunc);
super.dispose();
}
void myListenerFunc() {
print("Heya the object has changed!");
setState(() {
// re-render current stateful widget.
});
}
的方法,删除处置时的监听器都是一个好习惯。