anchor.diff:      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);
  +      final Offset clampedPosition =
  +          clampPosition(_position * scaleComebackRatio, maxScale);
         animatePosition(_position, clampedPosition);
         computeNextScaleState();
         return;
  
positive.code:       ..fling(velocity: 0.4);
    }
  
     void animatePosition(Offset from, Offset to) {
      _positionAnimation = Tween<Offset>(begin: from, end: to)
          .animate(_positionAnimationController);
      _positionAnimationController
  
negative.code:     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) {
        final Offset direction = details.velocity.pixelsPerSecond / magnitude;
        animatePosition(_position, clampPosition(_position + direction * 100.0));
      }
    }
  
    Offset clampPosition(Offset offset, [double scale]) {
  