从文档中我了解到,可以在addListener()实例上调用ChangeNotifier来向堆栈中添加自定义侦听器。
该方法接受具有零参数的回调(根据notifyListeners()),例如:
class MyClass extends ChangeNotifier {
MyClass() {
addListener(() {
// ...
});
}
}在回调中,如何发现MyClass的哪些属性或部分已被更改?
发布于 2019-10-09 21:30:07
ChangeNotifier本质上没有这样的能力。你必须实现你自己的逻辑。具体来说,您可以访问ChangeNotifier实现的所有属性,因为您在其作用域中添加了侦听器,或者您可以访问它,因为在您的作用域中有对它的引用。
ChangeNotifier只是实现了Listenable,并提供了一些用于管理侦听器的实用程序。此外,这些文件对此作了如下说明:
ChangeNotifier是针对少量(一两个)侦听器进行优化的。它是O(N),用于添加和删除侦听器,O(N 2)用于发送通知(其中N是侦听器的数量)。
我不确定有哪些选项具有更好的运行时复杂性来通知侦听器,但是在常规的应用程序中不会遇到任何问题。
ValueNotifier
ValueNotifier是ChangeNotifier的一个预先制作的实现,它将在其属性被更改时通知其侦听器。
对于大多数情况来说,这已经足够了,但是由于您似乎想要创建一个自定义ChangeNotifier,所以可以使用ValueNotifier来查看一个示例实现(它非常直观)。
如果您只是想做一般的状态管理,ValueNotifier通常工作得很好。然而,它们并不适用于每一种情况。因此,这里是一个包含不同状态管理选项的广泛列表。
考虑到这些问题,我认为最适合您需要和最受欢迎的技术如下:
Listenable一起工作,就像ChangeNotifier一样。InheritedWidget、StatefulWidget、ValueNotifier等)的方便包装器。https://stackoverflow.com/questions/58312255
复制相似问题