flutter - 什么时候 ChangeNotifier 比 Flutter 中的 Observable 更受欢迎?
问题描述
我一直在努力理解ChangeNotifier何时优于 Rxdart 的Observable或一般的流。
根据 Flutter 的文档:
一个可以扩展或混合的类,它提供使用 VoidCallback 进行通知的更改通知 API。
ChangeNotifier 针对少量(一或两个)侦听器进行了优化。添加和删除监听器是 O(N),调度通知是 O(N²)(其中 N 是监听器的数量)。
不过,我不确定 ChangeNotifier 能提供什么 Observable 或 Stream 不能。
解决方案
自您提出此问题以来的一些更新
- Observable 已弃用,您可以在 Stream 上使用扩展函数
- ChangeNotifier 性能:O(1) 用于添加侦听器,O(N) 用于移除侦听器和调度通知
但我会较少关注性能,而更多地关注用例。ValueNotifier 是一种轻量级的解决方案,但不如 Streams 强大。
这个 Reddit 线程很好地描述了用例的差异。就像这个 StackOverflow 帖子一样。
但总结一下:
- 在您的模型/网络层(或业务逻辑)中工作时,流非常有用。“流表示从源产生的一系列事件或信息片段(从零到无限)。这对于网络数据包、视频帧、分析事件、错误报告等自然是有意义的。”
- ValueNotifier 非常适合将状态更改传递回您的 UI。“如果你有一个对象的成员可能会改变,并且你想知道它们中的一些或全部何时发生变化,那么你需要做的就是在该类中混入 ChangeNotifier,然后在发生变化时调用 notifyListeners。”
推荐阅读
- css - Vue3 @click deos 在使用 -webkit-perspective: 500px 样式的元素内不起作用
- kotlin - 用于集合扩展功能的 Kotlin 泛型
- python-3.x - 如何在使用pyspark从s3读取文件时读取文件名
- matlab - 为什么这段代码没有给我情节线(没有错误)?
- javascript - JavaScript POST fetch 作为 OPTIONS 发送
- java - java.lang.IllegalArgumentException:输入标记不以输入路径开头
- php - 按最近的帖子排序分类
- amazon-web-services - Grails 4:不读取 Elastic Beanstalk 中的环境变量
- javascript - 使用不同的参数多次导入函数
- powerbi - Power BI 中的多表行级安全性