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