flutter - 调用 StreamController#close() 时未触发 doOnCancel()
问题描述
我将Observable
流(rxDart)传递给以StreamBuilder
侦听和更新 UI,然后当我在onDispose()
. 我预计关闭流会触发doOnClose()
我的 observable 的副作用,但不幸的doOnClose()
是 Observable 没有被调用,
我正在做的是:
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();
}
按照上面的代码doOnClose()
应该调用,但它没有被调用!!!
关于这种行为或场景的任何想法?
解决方案
.asBroadcastStream
要求开发人员明确处理没有更多侦听器的情况 - 例如.asBroadcastStream( onCancel: (sub) => sub.cancel() )
.
有关更多信息,请参阅https://stackoverflow.com/a/60470366/8696915。
推荐阅读
- count - 核心 EF 外部联接、计数和分组
- import - 我无法导入另一个文件
- javascript - SASS 部分导入在反应中不起作用
- python - Seaborn ValueError:“顶点”必须是形状为 Nx2 的 2D 列表或数组
- google-maps - Google Maps Android API:授权失败。确保启用了“Google Maps Android API v2”。确保以下 Android Key 存在
- python - Pygame:如何在按下键之前显示图像
- python - 如何让我的循环遍历我的列表?
- php - Symfony 3.4 处理多个输入问题
- reactjs - 在 Private Routes 中 React Rendering 两次
- python - 有没有办法将 multi_index 转换为 int 字符串/列表/数组?