如何在Dart中监听自定义事件?

13

我想做类似的事情

// WARNING: this code does not work, it's illustrative
query("#myBtn").onClick.listen((e) {
  window.fire["foo"];
});

window.on["foo"].listen((e) => print("foo was here"));

window.on["foo"].listen((e) => print("and here"));

有可能吗?怎么实现?我已经在Google上搜寻了几个小时了,但我对编程一般不熟悉,不知道相关的关键词。

谢谢! :)

-- 编辑:问题已解决 --

以下是如何传递参数(编辑器会报错,但它确实有效)

List<String> myData = ["one","two"];

query("#myBtn").onClick.listen((e) {
  window.on["foo"].dispatch(new CustomEvent("foo", canBubble: false, cancelable: false, detail: myData));
});

window.on["foo"].add((e) => print( e.detail[1] ));

:-)


为避免编辑器的“警告”,最后一句话可以这样写:window.on["foo"].add((CustomEvent e) => print((e.detail as List<String>)[1])); - Juan Mellado
2个回答

15
你说你想要传递数据。我们假设有这个类:

你说你想要传递数据。我们假设有这个类:

class Person {
    String name;
    int age;
}

然后是这个监听器:

window.on['foo'].listen((e) {
  Person p = e.detail;

  print(p.name); // Jack
});
我们只需要编写类似以下的内容来传递数据:

所有我们需要做的是传递数据,就像这样编写:

var p = new Person()
  ..name = 'Jack'
  ..age = 25;

var e = new CustomEvent('foo', detail: p);

window.on['foo'].dispatch(e);

这是做法。请查看文档:


没错。这是编辑之后我自己尝试写的方式更好 :) - user1816631

6

我确实读了那些,但在我的(低)水平上,几乎不可能理解。 你写的很完美,我会给你积分。但如果你能帮我传递参数,我会很高兴的。 :) - user1816631
这段代码不再起作用了@SethLadd @JustinFagnani。在_EventStream上没有dispatch。我猜我们需要使用Element.dispatchEvent代替? - Vyacheslav Egorov
@VyacheslavEgorov 这就是我的做法。我会修改答案,使其更符合原始问题的要求。 - Seth Ladd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接