Dart / Flutter:错误“流已被收听”。 &&在“ for循环”内部“等待”失败

时间:2019-04-05 09:15:36

标签: dart flutter stream iteration

是的,很好的人,

我可能在这里丢失了一些东西:

这段代码是虚构的(为方便起见,这过于简化了),但给出了这样的想法:

_map.keys.forEach((key) async {
   _bloc.sink.add(_map[key]);
await for (String _string in _bloc.stream) {
  _newMap.putIfAbsent(key, ()=> _string);
 }
});

Stream.fromIterable(_map.keys).forEach((day) async {
    _bloc.sink.add(_map[key]);
await for (String _string in _bloc.stream) {
  _newMap.putIfAbsent(key, ()=> _string);
 }
});

使用StreamController <...>。broadcast(); 溪流健康地缝合:

  

first:_Future哈希码:817453996 isBroadcast:true isEmpty:_Future   上一个:_未来长度:_未来运行时类型:类型   (_BroadcastStream <...>)single:_未来   _awaiter:null   _generator:null   _controller:_AsyncBroadcastStreamController

不返回此错误:

  

第一个:未处理的异常:\ n状态错误:流已经存在   听过。[...] hashCode:644468606 isBroadcast:false   isEmpty:未处理的异常:\ n错误状态:流已经存在   听过。[...]上一个:未处理的异常:\ n错误状态:流具有   [...]长度:未处理的异常:\ n不良状态:   流已经被监听。[...] runtimeType:Type   (_ControllerStream <...>)single:未处理的异常:\ n不良状态:   流已经被收听。[...] _awaiter:null   _generator:null _controller:_AsyncStreamController

在两种情况下均不起作用。

我打算做的是(在for循环内)在接收器中发送一个集合,

一个集团会做一些工作,并在流中返回另一个集合

从调试中我可以看到的是,循环只会不断地将内容发送到接收器。

我不确定这是因为:

...

1)循环不等待“等待”

并导致错误“流已经监听”

2)反之,“等待”由于错误而无法收听流

(或者因为广播可能会丢失事件),因此循环保持循环(?);

...

我更倾向于第一个,但是它应该按照此POST

工作

我在做什么错了?

预先感谢您,弗朗切斯科

1 个答案:

答案 0 :(得分:1)

这好像您多次调用stream.listen。尝试将_bloc.stream分配给for循环之外的变量。

var stream = _bloc.stream;


_map.keys.forEach((key) async {
  _bloc.sink.add(_map[key]);
await for (String _string in stream) {
 _newMap.putIfAbsent(key, ()=> _string);
}
});