dart - Dart Streams StreamTransformer int 上的错误不是 EventSink 的子类型
问题描述
现在尝试学习 Dart 和泛型我有这段代码可以学习流,但我似乎无法理解我的代码有什么问题
import 'dart:async';
void main() {
StreamController<int> controller = new StreamController<int>();
num i = 0;
Future.doWhile(() {
controller.add(i++);
if (i == 100) {
return false;
}
return true;
});
var result = controller.stream.transform(
StreamTransformer<int, EventSink<dynamic>>.fromHandlers(
handleData: (int number, EventSink<dynamic> sink) {
if (number == 70) {
sink.addError("Hit seventy");
} else {
sink.add(number);
}
}));
result.listen((data) => print(data));
}
上面的代码给我带来了以下错误
type 'int' is not a subtype of type 'EventSink<dynamic>' of 'data'
EventSinkWrapper.add (dart:async/stream_transformers.dart)
main.<anonymous closure> (file:///var/www/html/learning/dart/rr.dart:23:12)
HandlerEventSink.add (dart:async/stream_transformers.dart:228:7)
SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:120:24)
解决方案
AStreamTransformer
的泛型类型是数据输入的类型和数据输出的类型。您的变压器映射int
到dynamic
(尽管如当前所写,它实际上只发出int
)。
您在StringTransformer
构造函数上的类型不正确。(此外,没有必要重复handleData
lambda 定义中的类型,因为它们可以从转换器的类型中推断出来。)
尝试:
void main() {
StreamController<int> controller = new StreamController<int>();
num i = 0;
Future.doWhile(() {
controller.add(i++);
return i < 100;
});
var result = controller.stream.transform(
StreamTransformer<int, dynamic>.fromHandlers(
handleData: (number, sink) {
if (number == 70) {
sink.addError("Hit seventy");
} else {
sink.add(number);
}
},
),
);
result.listen((data) => print(data));
}
推荐阅读
- xcode - 更改应用名称 Xcode 时出现错误
- python - 如何在html源代码中提取href属性
- c - inptr 和 outptr 是什么意思
- python - 确定两个或多个布尔评估都为假的pythonic方法是什么?
- neural-network - 如何在 pytorch 中使用 tensorboard 调试器?
- r - R中geom_polygon中“填充”参数的行为
- ios - Xcode 版本 10.3 ITMS-90035:签名无效
- azure-sql-database - Azure PaaS SQL 密码策略
- java - HTML 内容不同于 Google“查看页面源代码”
- android - Android SDK 让我的 MacBook Pro 关机