如何在Dart中使用Stream.pipe?

时间:2018-07-31 21:22:07

标签: dart

我知道Stream.pipe通常用于读写文件,但是将其与StreamController和自定义流一起使用的一个很好的例子是什么?

编辑:我提供了一个有关如何使用Stream.pipe的示例,但是运行此代码时屏幕上没有任何输出。我希望数组通过转换器,将每个数字加倍,将输出通过管道传输到第二个控制器,然后将第二个数字输出到屏幕。但是,我没有看到任何结果。

import 'dart:async';

var stream = Stream.fromIterable([1, 2, 3, 4, 5]);

void main() {
  final controller1 = new StreamController();
  final controller2 = new StreamController();

  final doubler =
      new StreamTransformer.fromHandlers(handleData: (data, sink) {
      sink.add(data * 2);
  });

  controller1.stream.transform(doubler).pipe(controller2);
  controller2.stream.listen((data) => print(data));

}

1 个答案:

答案 0 :(得分:0)

我想出了自己的问题。我忘记插入controller1.addStream(stream);,所以controller1没有收到流,因此无法将其通过管道传输到controller2。这是我完成的代码。

import 'dart:async';

var stream = Stream.fromIterable([1, 2, 3, 4, 5]);

void main() {
  final controller1 = new StreamController();
  final controller2 = new StreamController();

  controller1.addStream(stream);

  final doubler =
      new StreamTransformer.fromHandlers(handleData: (data, sink) {
      sink.add(data * 2);
  });

  controller1.stream.transform(doubler).pipe(controller2);
  controller2.stream.listen((data) => print(data));

}