我正在将Observable
流(rxDart)传递给StreamBuilder
,以监听和更新UI,此后,我在{ {1}}。我希望关闭流会触发我的可观察的onDispose()
副作用,但不幸的是,可观察的doOnClose()
未被调用,
我正在做的是:
doOnClose()
小部件内部
Observable<dynamic> observerStream() {
return Observable.fromFuture(someFunction())
return data;
})
.doOnCancel(() {
print('*** NOT GETTING CALLED ***');
})
.asBroadcastStream();
根据上面的代码StreamController _controller = StreamController<dynamic>();
@override
void initState() {
super.initState();
_controller?.addStream(observerStream());
}
return StreamBuilder(
stream: _controller.stream,
builder: (context, snapshot) {
return body(snapshot.data);
},
);
@override
void dispose() {
_controller?.close();
super.dispose();
}
应该被调用,但是没有被调用!!!
对这种行为或场景有任何想法吗?
答案 0 :(得分:0)
.asBroadcastStream
要求开发人员显式处理不再有侦听器的情况,例如.asBroadcastStream( onCancel: (sub) => sub.cancel() )
。
有关更多信息,请参见https://stackoverflow.com/a/60470366/8696915。