6

すでにリッスンしている既存のストリームにトランスフォーマーをプログラムで追加する方法を探しています。

例:

Stream numbers = new Stream.fromIterable([0,1,2,3]);

numbers.listen((number) => print(number));

いくつかの UI イベントに応答して、最初に書いたかのように、マッピング トランスフォーマーを追加してこのストリームを変更したいと思います。

numbers.where((number) => number % 2 == 0);

今後、既存のすべてのリスナーは、中断することなく、偶数のみを受信する必要があります。これはどのように行うことができますか?

4

3 に答える 3

11

「トランスフォーマーをストリームに動的に挿入するにはどうすればよいか」のように考えるのではなく、「既に注入したトランスフォーマーを動的に制御するにはどうすればよいか」のように考えるのも 1 つの方法です。

を使用する例を次に示しStreamTransformerます。

var onlySendEvenNumbers = false; // controlled by some UI event handler

var originalStream = makeStreamOfStuff();

originalStream = originalStream.transform(new StreamTransformer.fromHandlers(
  handleData: (int value, EventSink<int> sink) {
    if (onlySendEvenNumber) {
      if (value.isEven) {
        sink.add(value);
      }
    } else {
      sink.add(value);
    }
}));

originalStream.listen(print);  // listen on events like normal
于 2014-09-18T02:08:40.663 に答える