【问题标题】:StreamTransformer in Dart being skipped?Dart 中的 StreamTransformer 被跳过?
【发布时间】:2018-08-02 00:42:15
【问题描述】:

我不确定我是否理解不正确,但这是我的代码。我试图让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

【问题讨论】:

    标签: stream dart


    【解决方案1】:

    正如我的导师所提到的,转换函数会创建一个新流。所以我必须在转换后的流上附加一个监听器,我不能指望转换后的值会从旧流中出来。所以下面修改后的代码就可以了。

       import 'dart:async';
        void main() {
         ...
    
          counterController.stream.map((input) => input)
          .transform(transformToString).listen(print);
    
          for(int i=0; i < 10; i++){
            increment();
          }
        }
    

    【讨论】:

      猜你喜欢
      • 2022-10-12
      • 2015-03-02
      • 2019-04-21
      • 2013-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      相关资源
      最近更新 更多