flutter - Stream transform 和 listen in flutter 有什么区别?何时实施?
问题描述
我正在 Flutter 中学习 BLoC 模式而不使用任何包。我所知道的是数据以 Sink 形式发送,输出以 BLoC 模式中的 Stream 形式给出。StreamController 可以处理这些事情。看起来这两种方法都对输入数据进行了更改,但我对它们的目的感到困惑。浏览了文档,但无法理解。
Class CartBloc{
final _cart = Cart();
Sink<Product> get addition => _additionalController.sink;
final _additionController = StreamController<Product>();
Stream<int> get itemCount => _itemCountSubject.stream;
final _itemCountSubject = BehaviorSubject<int>();
CartBloc(){
_additionaController.stream.listen(_handle);
}
void _handle(Product product){
_cart.add(product);
_itemCountSubject.add(_cart.itemCount);
}
}
上面的代码来自Build reactive mobile apps with Flutter (Google I/O '18)。他们提到侦听是必要的,因为我们不仅要捕获数据,还要通过_handle()方法进行一些其他操作。现在我的问题是我们不能用stream.transform()实现相同的功能。如果是,那么等效的实现是什么,如果不是,原因是什么。
解决方案
stream.transform(transformer)
将创建一个以某种方式从原始流中修改的新流。它不会开始侦听流,因此在它有侦听器之前不会有任何值流过流。
将其视为更改transform
流的一种方式,通常用于侦听其他一些代码。将其视为对来自流的值做出反应的一种方式。listen
推荐阅读
- php - 如何将两个输入组合成一个数组php
- python - 如何在 VS 代码任务构建中添加额外的 shell 命令?
- c# - 如何在相同字符之间提取字符串
- javascript - 如何使用 ember.js 上传 XLSX 文件并将其转换为 JSON
- karate - 为什么空手道加特林比 JMeter 慢
- php - 是什么导致数据在 DB 中插入两次以上?
- c# - 缩放级别上的 OxyPlot 更改间隔
- angular - Angular 6 - 使用 ng-content 时样式不起作用
- c# - asp mvc 核心 url 本地化
- ios - iOS 的 Firebase 集成示例 (FriendlyPix)