removeListener method
- @override
Remove a previously registered closure from the list of closures that are notified when the object changes.
If the given listener is not registered, the call is ignored.
This method must not be called after dispose has been called.
If a listener had been added twice, and is removed once during an
iteration (i.e. in response to a notification), it will still be called
again. If, on the other hand, it is removed as many times as it was
registered, then it will no longer be called. This odd behavior is the
result of the ChangeNotifier
not being able to determine which listener
is being removed, since they are identical, and therefore conservatively
still calling all the listeners when it knows that any are still
registered.
This surprising behavior can be unexpectedly observed when registering a listener on two separate objects which are both forwarding all registrations to a common upstream object.
Implementation
@override
void removeListener(VoidCallback listener) {
assert(_debugAssertNotDisposed());
_listeners.remove(listener);
}