如何使用新的streams API在Dart中注册自定义事件

如何使用新的streams API在Dart中注册自定义事件,dart,Dart,我正在尝试在Dart中注册CustomEvent()。这方面的旧代码是: window.on['foo'].add((e)=>print(e.detail)); 新的streams API改变了您注册事件的方式。如何使用新API注册CustomEvents?其思想是,自定义事件的声明和使用方式与内置事件相同 因此,对于自定义事件,您可以按照以下方式进行操作: 类数据生成器{ 静态EventStreamProvider dataEvent=新的EventStreamProvider(“数据”);

我正在尝试在Dart中注册CustomEvent()。这方面的旧代码是:

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

新的streams API改变了您注册事件的方式。如何使用新API注册CustomEvents?

其思想是,自定义事件的声明和使用方式与内置事件相同

因此,对于自定义事件,您可以按照以下方式进行操作:

类数据生成器{
静态EventStreamProvider dataEvent=新的EventStreamProvider(“数据”);
}
然后在元素上收听它:

DataGenerator.dataEvent.forTarget(元素).listen(…);
一旦支持元素子类化,事件通常直接在其元素上触发,并且当事件子类化允许自定义事件使用更有用的事件类型时,这将变得更清晰

我们讨论了在['foo'].listen(…)API上保持一个
窗口,但试图阻止字符串访问器,因为对于某些事件,我们将它们多填充为不同的事件名称

下面是一个更完整的示例:

导入“dart:html”;
div元素dartDiv;
main(){
dartDiv=查询(“#dartDiv”);
//添加一个按钮以生成名为CustomDartEvent的CustomEvent。
var customEventStreamProvider=新的EventStreamProvider(“CustomDartEvent”);
var customEventButton=newbuttonelement()
…text=“生成自定义省道事件”
..classes.add(“gwt按钮”)//以确保一致性
…一次点击。听((e){
变量详细信息={
“n”:8,
“s”:“Dart的你好”,
“obj”:{
“你好”:“来自Dart”
}
};  
var事件=新的CustomEvent(“CustomDartEvent”,
canBubble:false,可取消:false,细节:detail);
窗口。dispatchEvent(事件);
});
dartDiv.children.add(customEventButton);
//侦听名为CustomDartEvent的CustomEvents。
customEventStreamProvider.forTarget(窗口).listen((e){
打印字符串(“”)
收到的自定义事件:
类型:${e.type},
详细信息:${e.detail}
""");
});
}
无效打印字符串(字符串s){
var div=新的DivElement()
..text=s;
dartDiv.children.add(div);
}

谢谢。让我试一试!如果我想用我自己的对象(而不是窗口)分派事件,该怎么办?换句话说,我应该如何实现dispatchEvent方法?tomazjubacki您知道如何实现吗?