anchor.diff:  
     void _handleChanged(double value) {
       assert(widget.onChanged != null);
  -    final double transformedValue = _lerp(value);
  -    widget.onChanged(transformedValue);
  +    final double lerpValue = _lerp(value);
  +    if (lerpValue != widget.value) {
  +      widget.onChanged(lerpValue);
  +    }
     }
   
     // Returns a number between min and max, proportional to value, which must
  
positive.code:   double _unlerp(double value) {
      assert(value <= widget.max);
      assert(value >= widget.min);
      return widget.max > widget.min ? (widget.value - widget.min) / (widget.max - widget.min) : 0.0;
    }
  
    @override
  
negative.code:       ..team = team
        ..onStart = _handleDragStart
        ..onUpdate = _handleDragUpdate
        ..onEnd = _handleDragEnd
        ..onCancel = _endInteraction;
      _tap = new TapGestureRecognizer()
        ..team = team
        ..onTapDown = _handleTapDown
        ..onTapUp = _handleTapUp
        ..onTapCancel = _endInteraction;
      _reaction = new CurvedAnimation(parent: state.reactionController, curve: Curves.fastOutSlowIn)
        ..addListener(markNeedsPaint);
      state.enableController.value = isInteractive ? 1.0 : 0.0;
  