首页 > 解决方案 > 什么时候 ChangeNotifier 比 Flutter 中的 Observable 更受欢迎?

问题描述

我一直在努力理解ChangeNotifier何时优于 Rxdart 的Observable或一般的流。

根据 Flutter 的文档:

一个可以扩展或混合的类,它提供使用 VoidCallback 进行通知的更改通知 API。

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

不过,我不确定 ChangeNotifier 能提供什么 Observable 或 Stream 不能。

标签: flutterdartrxdartflutter-change-notifier

解决方案


自您提出此问题以来的一些更新

  • Observable 已弃用,您可以在 Stream 上使用扩展函数
  • ChangeNotifier 性能:O(1) 用于添加侦听器,O(N) 用于移除侦听器和调度通知

但我会较少关注性能,而更多地关注用例。ValueNotifier 是一种轻量级的解决方案,但不如 Streams 强大。

这个 Reddit 线程很好地描述了用例的差异。就像这个 StackOverflow 帖子一样。

但总结一下:

  • 在您的模型/网络层(或业务逻辑)中工作时,流非常有用。“流表示从源产生的一系列事件或信息片段(从零到无限)。这对于网络数据包、视频帧、分析事件、错误报告等自然是有意义的。”
  • ValueNotifier 非常适合将状态更改传递回您的 UI。“如果你有一个对象的成员可能会改变,并且你想知道它们中的一些或全部何时发生变化,那么你需要做的就是在该类中混入 ChangeNotifier,然后在发生变化时调用 notifyListeners。”

推荐阅读