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);
  -      animatePosition(
  -          _position, clampPosition(_position * scaleComebackRatio, maxScale));
  +      final Offset clampedPosition = clampPosition(_position * scaleComebackRatio, maxScale);
  +      animatePosition(_position, clampedPosition);
         computeNextScaleState();
         return;
       }
  
positive.code: 
    void onScaleStart(ScaleStartDetails details) {
      _scaleBefore = scaleStateAwareScale();
      _normalizedPosition = details.focalPoint - _position;
      _scaleAnimationController.stop();
      _positionAnimationController.stop();
  
negative.code:       computeNextScaleState();
        return;
      }
      // get magnitude from gesture velocity
      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), magnitude);
      }
  
    }
  
    Offset clampPosition(Offset offset, [double scale]) {
  