anchor.diff:      final double magnitude = details.velocity.pixelsPerSecond.distance;
   
       // animate velocity only if there is no scale change and a significant magnitude
  -    if(_scaleBefore / _scale == 1.0 && magnitude >= 400.0 ){
  +    if (_scaleBefore / _scale == 1.0 && magnitude >= 400.0) {
         final Offset direction = details.velocity.pixelsPerSecond / magnitude;
  -      animatePosition( _position, clampPosition(_position + direction * 100.0));
  -    }
  -
  +      animatePosition(_position, clampPosition(_position + direction * 100.0));
  +    }
     }
   
     Offset clampPosition(Offset offset, [double scale]) {
  
positive.code:     final double maxScale = widget.scaleBoundaries.computeMaxScale();
      final double minScale = widget.scaleBoundaries.computeMinScale();
  
  
  
      //animate back to maxScale if gesture exceeded the maxScale specified
      if (_scale > maxScale) {
        final double scaleComebackRatio = maxScale / _scale;
        animateScale(_scale, maxScale);
        final Offset clampedPosition = clampPosition(_position * scaleComebackRatio, maxScale);
        animatePosition(_position, clampedPosition);
        computeNextScaleState();
        return;
  
negative.code:       ..fling(velocity: 0.4);
    }
  
    void animatePosition(Offset from, Offset to) {
      _positionAnimation = Tween<Offset>(begin: from, end: to)
          .animate(_positionAnimationController);
      _positionAnimationController
  