如何将mutliple侦听器分配给单个StreamSubscription?

时间:2015-07-21 22:53:51

标签: dart

这是一个有效的陈述

StreamSubscription currentSubscription = querySelector(…).onClick.listen(….).

这里有一个侦听器分配给一个StreamSubscription。

但是当你执行queryselectorAll(..)。onClick.listen(..)时。您正在为所有查询选定的元素添加侦听器。

我注意到以下声明也有效。

StreamSubscription currentSubscription = queryselectorAll(..).onClick.listen(..) 

在这里,我使用onClick侦听器将1个StreamSubscription分配给元素列表。这是如何工作的?

2 个答案:

答案 0 :(得分:3)

您无法将多个侦听器分配给StreamSubscription

您的第二个语句不起作用,因为querySelectorAll()会返回一个集合而您无法收听集合。

也许这就是你想要的:

Iterable<StreamSubscription> subscriptions = 
    queryselectorAll(..).map((e) => e.onClick.listen(..));

然后再

if(subscriptions != null) {
  subscriptions.forEach((s) => s.cancel());
}

答案 1 :(得分:1)

您正在聆听ElementList。我无法从文档中看到预期如何工作,所以我猜它实际上是在接收列表中所有元素的事件。

您仍然只在一个流上收听,onClick的{​​{1}}流,以及您收到的ElementList与该列表相关。