Remove event listener with the new library

2020-04-05 09:24发布

问题:

How do i remove a listener for an event I've previously registered to with the new dart library?

I'm using this to listen for events with the new library:

element.onMouseMove.listen

What is the equivalent version of this?

element.on.mouseMove.remove

回答1:

element.onMouseMove.listen(...) returns a StreamSubscription. Simply call its cancel() method to stop receiving events.



回答2:

In addition to Alexandre's answer, a concrete example in code would look like this:

import 'dart:html';

void main() {
  var listener = (e) => print("Moved");

  var element = query("#text");
  var streamsub = element.onMouseMove.listen(listener); // <--- add the listener

  var reverseText= (Event event) {
    var text = query("#text").text;
    var buffer = new StringBuffer();
    for (int i = text.length - 1; i >= 0; i--) {
      buffer.add(text[i]);
    }
    query("#text").text = buffer.toString();

    streamsub.cancel(); // <----   stop listening
  };

  element
    ..text = "Click me!"
    ..onClick.listen(reverseText);    
}

This prints "Moved" when you move the mouse over the "Click Me!" text (from the standard dart sample). When clicked, it stops.



标签: dart