在 Flutter 中,ChangeNotifier 何时优先于 Observable?

Eli*_*hen 8 dart flutter rxdart flutter-change-notifier

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

根据 Flutter 的文档:

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

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

不过,我不确定 ChangeNotifier 可以提供 Observable 或 Stream 不能提供的功能。

Kyl*_*enn 6

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

  • Observable 已被弃用,您只能在 Stream 上使用扩展函数
  • ChangeNotifier 性能:添加侦听器为 O(1),删除侦听器和分派通知为 O(N)

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

这个 Reddit 线程很好地描述了用例的差异。正如StackOverflow 的这篇文章一样。

但总结一下:

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