anchor.diff:        ..fling(velocity: 0.4);
     }
   
  -   void animatePosition(Offset from, Offset to) {
  +  void animatePosition(Offset from, Offset to) {
       _positionAnimation = Tween<Offset>(begin: from, end: to)
           .animate(_positionAnimationController);
       _positionAnimationController
  
positive.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]) {
  
negative.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;
  