在流中使用地图时出现Dart问题

时间:2020-07-10 12:59:11

标签: dictionary dart stream

我创建一个简单的流,添加一些元素并收听该流。但是在流上使用地图时出现问题。为简单起见,我只是将值映射到相同的值(我猜是吗?)。

当我尝试运行程序时,出现地图错误:

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();
}

1 个答案:

答案 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