从文档中,我了解到可以调用ChangeNotifier实例上的addListener()将自定义监听器添加到堆栈中。

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

class MyClass extends ChangeNotifier {

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

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

最佳答案

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

ChangeNotifier 仅实现 Listenable ,并提供了一些用于管理监听器的实用程序。此外,文档中还说明了以下内容:



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

ValueNotifier

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

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

  • InheritedWidget,因为它使您可以根据更改的数据通知受抚养人。另外,还有InheritedModel作为它的扩展,还有InheritedNotifierListenable一样,它与 ChangeNotifier 一起使用。
  • BLOC模式,可用于流。
  • provider package主要是各种Flutter状态管理技术(InheritedWidgetStatefulWidgetValueNotifier等)的便捷包装。
  • 10-01 21:21