stream - Dart中的StreamTransformer被跳过了吗?

标签 stream dart

我不确定我是否理解不正确,但这是我的代码。我正在尝试使StreamTransformer对流起作用,但是值仍然不受影响地出现在另一端。
注意:我添加了.map()函数,该函数什么也不做,只是为了确保它不是我遇到的缺少的map函数。我把它留在这里,以防万一。

import 'dart:async';
void main() {
 int count = 0;
 var counterController = new StreamController();
  counterController.stream.listen((value) => print(value));

  void increment() {
    counterController.add(count++);
  }

    final transformToString =
        new StreamTransformer.fromHandlers(handleData: (number, sink) {
      if (number.runtimeType == int) {
        sink.add("The counter is at $number!");
      } else {
        sink.addError("$number is not an int!");
      }
    });

    counterController.stream.map((input) => input).transform(transformToString);
  for(int i=0; i < 10; i++){
    increment();
  }
}

Link to the code in DartPad

最佳答案

正如我的老师所提到的,transform函数创建了一个新的流。因此,我必须在转换后的流上附加一个侦听器,我不能指望转换后的值会从旧的流中出来。因此,下面的修改后的代码有效。

   import 'dart:async';
    void main() {
     ...

      counterController.stream.map((input) => input)
      .transform(transformToString).listen(print);

      for(int i=0; i < 10; i++){
        increment();
      }
    }

关于stream - Dart中的StreamTransformer被跳过了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51644059/

相关文章:

php - 从 php stdin 保存大文件

c++ - 既然可以使用copy shell命令,为什么还要自己写一个copy程序呢?

android - 当用户从 flutter 的设置屏幕导航回应用程序时检测方法

Flutter error catch e.message 不工作

Flutter:DropdownButton不起作用,我加载了数据但它没有出现在界面中

java - Java 中的流用法

在 trait 中定义的 Scala 尾递归流处理器函数保存对流头的引用

css - 带有CSS的Dart聚合物造型阴影根元素

dart - 无法为 Dart 运行 pub get。如何在 Windows 10 上设置 PUB_CACHE?

c++ - 在 C++ 中使用继承类流