diff --git a/lib/components/canvas/interactive_canvas.dart b/lib/components/canvas/interactive_canvas.dart index 22a40ffce..575a646b2 100644 --- a/lib/components/canvas/interactive_canvas.dart +++ b/lib/components/canvas/interactive_canvas.dart @@ -876,60 +876,64 @@ class _InteractiveCanvasViewerState extends State return; } - if (_gestureType == _GestureType.pan) { - if (details.velocity.pixelsPerSecond.distance < kMinFlingVelocity) { - _currentAxis = null; - return; - } - final Vector3 translationVector = - _transformationController!.value.getTranslation(); - final Offset translation = - Offset(translationVector.x, translationVector.y); - final FrictionSimulation frictionSimulationX = FrictionSimulation( - widget.interactionEndFrictionCoefficient, - translation.dx, - details.velocity.pixelsPerSecond.dx, - ); - final FrictionSimulation frictionSimulationY = FrictionSimulation( - widget.interactionEndFrictionCoefficient, - translation.dy, - details.velocity.pixelsPerSecond.dy, - ); - final double tFinal = _getFinalTime( - details.velocity.pixelsPerSecond.distance, - widget.interactionEndFrictionCoefficient, - ); - _animation = Tween( - begin: translation, - end: Offset(frictionSimulationX.finalX, frictionSimulationY.finalX), - ).animate(CurvedAnimation( - parent: _controller, - curve: Curves.decelerate, - )); - _controller.duration = Duration(milliseconds: (tFinal * 1000).round()); - _animation!.addListener(_onAnimate); - _controller.forward(); - } else if (_gestureType == _GestureType.scale) { - if (details.scaleVelocity.abs() < 0.1) { - _currentAxis = null; - return; - } - final double scale = _transformationController!.value.getMaxScaleOnAxis(); - final FrictionSimulation frictionSimulation = FrictionSimulation( - widget.interactionEndFrictionCoefficient * widget.scaleFactor, - scale, - details.scaleVelocity / 10); - final double tFinal = _getFinalTime( - details.scaleVelocity.abs(), widget.interactionEndFrictionCoefficient, - effectivelyMotionless: 0.1); - _scaleAnimation = - Tween(begin: scale, end: frictionSimulation.x(tFinal)) - .animate(CurvedAnimation( - parent: _scaleController, curve: Curves.decelerate)); - _scaleController.duration = - Duration(milliseconds: (tFinal * 1000).round()); - _scaleAnimation!.addListener(_onScaleAnimate); - _scaleController.forward(); + switch (_gestureType) { + case _GestureType.pan: + if (details.velocity.pixelsPerSecond.distance < kMinFlingVelocity) { + _currentAxis = null; + return; + } + final Vector3 translationVector = + _transformationController!.value.getTranslation(); + final Offset translation = + Offset(translationVector.x, translationVector.y); + final FrictionSimulation frictionSimulationX = FrictionSimulation( + widget.interactionEndFrictionCoefficient, + translation.dx, + details.velocity.pixelsPerSecond.dx, + ); + final FrictionSimulation frictionSimulationY = FrictionSimulation( + widget.interactionEndFrictionCoefficient, + translation.dy, + details.velocity.pixelsPerSecond.dy, + ); + final double tFinal = _getFinalTime( + details.velocity.pixelsPerSecond.distance, + widget.interactionEndFrictionCoefficient, + ); + _animation = Tween( + begin: translation, + end: Offset(frictionSimulationX.finalX, frictionSimulationY.finalX), + ).animate(CurvedAnimation( + parent: _controller, + curve: Curves.decelerate, + )); + _controller.duration = Duration(milliseconds: (tFinal * 1000).round()); + _animation!.addListener(_onAnimate); + _controller.forward(); + case _GestureType.scale: + if (details.scaleVelocity.abs() < 0.1) { + _currentAxis = null; + return; + } + final double scale = + _transformationController!.value.getMaxScaleOnAxis(); + final FrictionSimulation frictionSimulation = FrictionSimulation( + widget.interactionEndFrictionCoefficient * widget.scaleFactor, + scale, + details.scaleVelocity / 10); + final double tFinal = _getFinalTime(details.scaleVelocity.abs(), + widget.interactionEndFrictionCoefficient, + effectivelyMotionless: 0.1); + _scaleAnimation = + Tween(begin: scale, end: frictionSimulation.x(tFinal)) + .animate(CurvedAnimation( + parent: _scaleController, curve: Curves.decelerate)); + _scaleController.duration = + Duration(milliseconds: (tFinal * 1000).round()); + _scaleAnimation!.addListener(_onScaleAnimate); + _scaleController.forward(); + case _GestureType.rotate || null: + break; } }