从文档中我了解到,人们可以在ChangeNotifier实例上调用addListener()
来向堆栈添加自定义侦听器。
此方法接受零参数(根据notifyListeners())的回调,例如:
class MyClass extends ChangeNotifier {
MyClass() {
addListener(() {
// ...
});
}
}
如何从回调中找出MyClass
的哪些属性或部分已更改?
答案 0 :(得分:4)
ChangeNotifier
本质上没有这种功能。您将必须实现自己的逻辑。具体来说,您可以访问ChangeNotifier
实现的所有属性,因为您在其作用域中添加了侦听器,或者可以访问它是因为您在范围中具有对它的引用。
ChangeNotifier
仅实现Listenable
,并提供了一些实用程序来管理侦听器。此外,文档对此进行了声明:
ChangeNotifier已针对少量(一两个)听众进行了优化。用于添加和删除侦听器的O(N),用于调度通知的O(N²)(其中N是侦听器的数量)。
我不确定用于通知侦听器的具有更高运行时复杂度的选项,但是您不会在常规Flutter应用程序中遇到任何问题。
ValueNotifier
是ChangeNotifier
的预制实现,当其value
property更改时将通知其侦听器。
在大多数情况下,这已经足够,但是由于您似乎想创建自定义ChangeNotifier
,因此可以使用source code of ValueNotifier
来查看示例实现(非常简单)。 / p>
如果您只是想进行状态管理,通常ValueNotifier
会很好。但是,它们并不适用于所有情况。因此,这里是extensive list with different state management options。
考虑到这些问题,我认为最适合您需求的技术和最受欢迎的选项如下:
InheritedWidget,因为它使您可以根据更改的数据通知受抚养人。另外,有InheritedModel作为它的扩展,InheritedNotifier与Listenable
一样,就像ChangeNotifier
一样。
BLOC模式,适用于流。
provider
package主要是各种Flutter状态管理技术({{1},InheritedWidget
,StatefulWidget
等)的便捷包装。