首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ChangeNotifier?

如何使用ChangeNotifier?
EN

Stack Overflow用户
提问于 2019-10-09 21:02:13
回答 1查看 9.8K关注 0票数 7

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

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

代码语言:javascript
复制
class MyClass extends ChangeNotifier {

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

在回调中,如何发现MyClass的哪些属性或部分已被更改?

EN

回答 1

Stack Overflow用户

发布于 2019-10-09 21:30:07

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

ChangeNotifier只是实现了Listenable,并提供了一些用于管理侦听器的实用程序。此外,这些文件对此作了如下说明:

ChangeNotifier是针对少量(一两个)侦听器进行优化的。它是O(N),用于添加和删除侦听器,O(N 2)用于发送通知(其中N是侦听器的数量)。

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

ValueNotifier

ValueNotifierChangeNotifier的一个预先制作的实现,它将在其属性被更改时通知其侦听器。

对于大多数情况来说,这已经足够了,但是由于您似乎想要创建一个自定义ChangeNotifier,所以可以使用ValueNotifier来查看一个示例实现(它非常直观)。

如果您只是想做一般的状态管理,ValueNotifier通常工作得很好。然而,它们并不适用于每一种情况。因此,这里是一个包含不同状态管理选项的广泛列表

考虑到这些问题,我认为最适合您需要和最受欢迎的技术如下:

  • InheritedWidget,因为它允许您根据数据更改通知受抚养人。此外,还有InheritedModel作为这个和InheritedNotifier的扩展,它与Listenable一起工作,就像ChangeNotifier一样。
  • 集团模式,它与流一起工作。
  • 套餐主要是各种颤振状态管理技术(InheritedWidgetStatefulWidgetValueNotifier等)的方便包装器。
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58312255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档