如何使用ChangeNotifier?

时间:2019-10-09 21:02:13

标签: flutter dart

从文档中我了解到,人们可以在ChangeNotifier实例上调用addListener()来向堆栈添加自定义侦听器。

此方法接受零参数(根据notifyListeners())的回调,例如:

class MyClass extends ChangeNotifier {

  MyClass() {
    addListener(() {
      // ...
    });
  }
}

如何从回调中找出MyClass的哪些属性或部分已更改?

1 个答案:

答案 0 :(得分:4)

ChangeNotifier本质上没有这种功能。您将必须实现自己的逻辑。具体来说,您可以访问ChangeNotifier实现的所有属性,因为您在其作用域中添加了侦听器,或者可以访问它是因为您在范围中具有对它的引用。

ChangeNotifier仅实现Listenable,并提供了一些实用程序来管理侦听器。此外,文档对此进行了声明:

  

ChangeNotifier已针对少量(一两个)听众进行了优化。用于添加和删除侦听器的O(N),用于调度通知的O(N²)(其中N是侦听器的数量)。

我不确定用于通知侦听器的具有更高运行时复杂度的选项,但是您不会在常规Flutter应用程序中遇到任何问题。

ValueNotifier

ValueNotifierChangeNotifier的预制实现,当其value property更改时将通知其侦听器。
在大多数情况下,这已经足够,但是由于您似乎想创建自定义ChangeNotifier,因此可以使用source code of ValueNotifier来查看示例实现(非常简单)。 / p>


如果您只是想进行状态管理,通常ValueNotifier会很好。但是,它们并不适用于所有情况。因此,这里是extensive list with different state management options
考虑到这些问题,我认为最适合您需求的技术和最受欢迎的选项如下: