我创建一个简单的流,添加一些元素并收听该流。但是在流上使用地图时出现问题。为简单起见,我只是将值映射到相同的值(我猜是吗?)。
当我尝试运行程序时,出现地图错误:
Uncaught Error: TypeError: Instance of '_MapStream<String, dynamic>': type '_MapStream<String, dynamic>' is not a subtype of type 'Stream<String>'
import 'dart:async';
void main() async {
StreamController controller = StreamController<String>.broadcast();
final StreamTransformer transformer = StreamTransformer<String, String>.fromHandlers(
handleData: (data, EventSink sink) {
sink.add(data);
}
);
Stream stream = controller.stream;
stream
.map((value) => value) // <-- Problem in this line
.transform(transformer)
.listen(
(data) {
print('listen: $data');
},
onError: (err) => print(err));
controller.add('foo');
controller.add('baa');
controller.close();
}
答案 0 :(得分:1)
您的问题是您要强制泛型类型中的非泛型类型。如果您在不使用显式键入的地方编写这样的代码:
if (...)
然后,飞镖会自动确定您要执行的类型是import 'dart:async';
void main() async {
final controller = StreamController<String>.broadcast(); // <-- fixed here
final StreamTransformer transformer =
StreamTransformer<String, String>.fromHandlers(
handleData: (data, EventSink sink) {
sink.add(data);
});
final stream = controller.stream; // <-- fixed here
stream
.map((value) => value) // <-- Problem in this line
.transform(transformer)
.listen((data) {
print('listen: $data');
}, onError: (err) => print(err));
controller.add('foo');
controller.add('baa');
controller.close();
}
和StreamController<String>
,而不是您执行的Stream<String>
和StreamController
。
在删除类型的通用部分时,还将删除Dart猜测所调用的所有方法的类型的能力。
如果使用显式键入,则应输入:
Stream