【问题标题】:doOnCancel() not triggered on calling StreamController#close()调用 StreamController#close() 时未触发 doOnCancel()
【发布时间】:2019-10-14 12:30:04
【问题描述】:

我将Observable(rxDart) 传递给StreamBuilder,以便收听和更新用户界面,然后当我关闭onDispose() 中的流时。我预计关闭流会触发我的 observable 的 doOnClose() 副作用,但不幸的是 Observable 的 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();
}

按照上面的代码,doOnClose() 应该被调用,但它没有被调用!!!

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

【问题讨论】:

    标签: flutter dart rxdart


    【解决方案1】:

    .asBroadcastStream 要求开发者明确处理没有更多监听器的情况——比如.asBroadcastStream( onCancel: (sub) =&gt; sub.cancel() )

    请参阅https://stackoverflow.com/a/60470366/8696915 了解更多信息。

    【讨论】:

      猜你喜欢
      • 2019-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多