首页 > 解决方案 > 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()实现相同的功能。如果是,那么等效的实现是什么,如果不是,原因是什么。

标签: flutterdart

解决方案


stream.transform(transformer)将创建一个以某种方式从原始流中修改的新流。它不会开始侦听流,因此在它有侦听器之前不会有任何值流过流。

将其视为更改transform流的一种方式,通常用于侦听其他一些代码。将其视为对来自流的值做出反应的一种方式。listen


推荐阅读