我有StreamBuilder
Widget build(BuildContext context) {
return StreamBuilder(
initialData: false,
stream: widget.stream, ...
Run Code Online (Sandbox Code Playgroud)
对于初始化小部件,我调用:
_EventSpeakerPager(..., streamController.stream.distinct());
Run Code Online (Sandbox Code Playgroud)
这会产生错误"Bad state:Stream已经被收听了." 没有distinct()它可行,但它不适合我.
我试过asBroadcastStream()并得到了同样的错误
有谁知道,我该怎么办?
PS我已经研究了这些:
PPS当我没有使用流时StreamBuilder- 一切正常
void initState() {
super.initState();
widget.stream.listen((bool data) {
setState(() {
...
});
});
Run Code Online (Sandbox Code Playgroud)
}
And*_*sky 11
所以,我需要做的就是更换
final StreamController<bool> streamController = StreamController<bool>();
同 final StreamController<bool> streamController = StreamController<bool>.broadcast();
使用rx_dart来自pubspec 的库:https ://pub.dartlang.org/packages/rxdart
现在将您的Stream<Something>声明更改为BehaviorSubject<Something>。(BehaviorSubject是流的国王,它存储了所传输的最后一个值。库中还有其他可用的主题,例如PublishSubject和和ReplaySubject,请检查其文档以了解您的用例)。
该rx_dart库是Stream基类的扩展,功能更强大,更易于使用。
检查他们的GitHub:https : //github.com/ReactiveX/rxdart
| 归档时间: |
|
| 查看次数: |
2851 次 |
| 最近记录: |