在调用StreamController#close()时未触发doOnCancel()

时间:2019-10-14 12:30:04

标签: flutter dart rxdart

我正在将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(); } 应该被调用,但是没有被调用!!!

对这种行为或场景有任何想法吗?

1 个答案:

答案 0 :(得分:0)

.asBroadcastStream要求开发人员显式处理不再有侦听器的情况,例如.asBroadcastStream( onCancel: (sub) => sub.cancel() )

有关更多信息,请参见https://stackoverflow.com/a/60470366/8696915