我有StreamBuilder
Widget build(BuildContext context) {
return StreamBuilder(
initialData: false,
stream: widget.stream, ...
我初始化小部件为:
_EventSpeakerPager(..., streamController.stream.distinct());
这将产生错误“错误状态:流已被收听”。
如果没有distinct()
,它会起作用,但是不适合我。
我尝试过asBroadcastStream()
并遇到了相同的错误
有人知道,我该怎么处理
P.S。我已经研究过这些:
P.P.S。
当我使用不带StreamBuilder
的流时-一切正常
void initState() {
super.initState();
widget.stream.listen((bool data) {
setState(() {
...
});
});
}
答案 0 :(得分:8)
所以,我要做的就是替换
final StreamController<bool> streamController = StreamController<bool>();
与final StreamController<bool> streamController = StreamController<bool>.broadcast();
答案 1 :(得分:2)
使用pubspec中的rx_dart
库:https://pub.dartlang.org/packages/rxdart
现在将您的Stream<Something>
声明更改为BehaviorSubject<Something>
。
(BehaviorSubject是流的国王,它存储了所传输的最后一个值。库中还有其他可用的主题,例如PublishSubject
和ReplaySubject
,请查看其文档以了解您的用例)。 / p>
rx_dart
库是Stream基类的扩展,功能更强大,更易于使用。
检查其GitHub:https://github.com/ReactiveX/rxdart