我们如何删除内联代码侦听器?

时间:2019-04-08 22:51:39

标签: dart flutter

假设我们在如下视图中将侦听器添加到changeNotifier对象:

someChangeNotifierObject.addListener((){ if (this.mounted) setState(){}});
  1. 在处理视图时,我们是否需要显式删除侦听器?
  2. 如果不删除会产生什么影响?
  3. 由于它是嵌入式代码,如何删除它?

1 个答案:

答案 0 :(得分:0)

  1. 如果将侦听器添加到超级对象(位于当前状态之外的对象)并且在侦听器内部使用setState-在这种情况下,应在当前对象上将其明确删除国家处置。

  2. 否则,当对象通知其侦听器时,setState将引发异常,因为到那时您已在其中添加侦听器的状态已经被处置。

  3. 请勿在{{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. }); } 的方法,删除处置时的监听器都是一个好习惯。