【问题标题】:Unable to cancel my StreamSubscription based on condition from another StreamSubscription?无法根据另一个 StreamSubscription 的条件取消我的 StreamSubscription?
【发布时间】:2020-06-20 15:18:53
【问题描述】:

我有两个Streams。当conditionStream 的值为假时,我想停止stream1。但是当 streamSubscription.cancel(); 被称为 stream1 时没有取消,我不知道为什么。非常感谢您的帮助。

代码:

simpleListeningHub<T>(
{Stream<T> stream1, onListening(T), Stream<bool> conditionStream}) {
StreamSubscription streamSubscription;
streamSubscription = stream1.listen((T data) {
  onListening(data);
});

conditionStream.listen((isTrue) {
if (!isTrue) {
  try {
    streamSubscription.cancel();
  } catch (e) {
     print(e.toString());
  }
 }
 });
}

【问题讨论】:

  • 尝试await streamSubscription.cancel(); 以完成cancel 的执行。
  • 做了但还是不行,ps。当我在 conditionStream.listening 之外调用它时,取消函数工作正常
  • 您是否有意检查条件是否为假?也许您必须将其更改为 if (!isTrue) 为 if(isTrue)` 。
  • 是的,抱歉命名错误,即将更改它,但我确实尝试了两种情况(当它为真和假时),并在其上设置断点以确保正在调用 streamSubscription.cancel() 但即使它调用它仍然不会取消流
  • @pskink 非常感谢我找到了解决方案,即将回答我自己的问题

标签: flutter dart


【解决方案1】:

找到解决办法

作为@pskink 代码,所以我可以看到取消工作正常,但使它看起来不像是因为:当我单击按钮将数据添加到条件流时,我确实设置了状态。所以它确实取消了,但它重建了小部件并在调用取消函数后再次开始监听,这就是为什么它看起来取消函数不起作用的原因。谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-26
    • 2020-10-01
    • 2020-02-24
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多