anchor.diff:  /// A mixin that implements the addStatusListener/removeStatusListener protocol
   /// and notifies all the registered listeners when notifyStatusListeners is
   /// called.
  -abstract class AnimationLocalStatusListenersMixin extends _ListenerMixin {
  +///
  +/// This mixin requires that the mixing class provide methods [didRegisterListener]
  +/// and [didUnregisterListener]. Implementations of these methods can be obtained
  +/// by mixing in another mixin from this library, such as [AnimationLazyListenerMixin].
  +abstract class AnimationLocalStatusListenersMixin {
     // This class is intended to be used as a mixin, and should not be
     // extended directly.
     factory AnimationLocalStatusListenersMixin._() => null;
   
     final ObserverList<AnimationStatusListener> _statusListeners = ObserverList<AnimationStatusListener>();
  +
  +  /// Called immediately before a status listener is added via [addStatusListener].
  +  ///
  +  /// At the time this method is called the registered listener is not yet
  +  /// notified by [notifyStatusListeners].
  +  void didRegisterListener();
  +
  +  /// Called immediately after a status listener is removed via [removeStatusListener].
  +  ///
  +  /// At the time this method is called the removed listener is no longer
  +  /// notified by [notifyStatusListeners].
  +  void didUnregisterListener();
   
     /// Calls listener every time the status of the animation changes.
     ///
  
positive.code: 
  import 'animation.dart';
  
  abstract class _ListenerMixin {
    // This class is intended to be used as a mixin, and should not be
    // extended directly.
    factory _ListenerMixin._() => null;
  
    void didRegisterListener();
    void didUnregisterListener();
  }
  
  /// A mixin that helps listen to another object only when this object has registered listeners.
  abstract class AnimationLazyListenerMixin extends _ListenerMixin {
    // This class is intended to be used as a mixin, and should not be
    // extended directly.
    factory AnimationLazyListenerMixin._() => null;
  
    int _listenerCounter = 0;
  
    @override
    void didRegisterListener() {
      assert(_listenerCounter >= 0);
      if (_listenerCounter == 0)
  
negative.code:   bool get isListening => _listenerCounter > 0;
  }
  
  /// A mixin that replaces the [didRegisterListener]/[didUnregisterListener] contract
  /// with a dispose contract.
  ///
  /// This mixin provides implementations of [didRegisterListener] and [didUnregisterListener],
  /// and therefore can be used in conjunction with mixins that require these methods,
  /// [AnimationLocalListenersMixin] and [AnimationLocalStatusListenersMixin].
  abstract class AnimationEagerListenerMixin {
    // This class is intended to be used as a mixin, and should not be
    // extended directly.
    factory AnimationEagerListenerMixin._() => null;
  
    /// This implementation ignores listener registrations.
    void didRegisterListener() { }
  
    /// This implementation ignores listener registrations.
    void didUnregisterListener() { }
  
    /// Release the resources used by this object. The object is no longer usable
  