我有一个创建按钮并将侦听器连接到单击事件的类。在子类中,我想替换超类处理程序。此代码添加了一个侦听器:
row.query("[value='Save']").onClick.listen(handleNewAlert);
如何删除现有的侦听器?
Stream.listen ()方法返回一个StreamSubscription对象。调用StreamSubscription.cancel()取消事件监听。
var subs = element.onClick.listen((e) => print(e));
// Remove the listener.
subs.cancel();
// Add another listener.
element.onClick.listen((e) => print(e));
有关更多信息,请参阅本文。
Greg 的回答描述了如何取消订阅事件源。这是正确的,但 IMO 有点尴尬,因为您需要保留订阅实例以防任何派生类想要取消它,或者如果您想隐藏详细信息,您需要在基类上为此提供一个方法.
正如您所说,您要替换处理程序,我将其理解为提供不同的实现,一种更简单的方法是handleNewAlert
在派生类中简单地覆盖方法。
当然,如果您指定了匿名函数而不是方法名称,则它将不起作用,因为它显然不能被覆盖,但在您的示例中显示的场景中,这可能是一种更简单的方法。