handlePanUpdate method

void handlePanUpdate(
  1. DragUpdateDetails details
)
override

Is called when a pan gesture is updated.

See also:

Implementation

void handlePanUpdate(DragUpdateDetails details) {
  final center = Offset(
    size.width / 2,
    _math.min(size.width, size.height) / 2,
  );
  final onTop = details.localPosition.dy <= center.dy;
  final onLeftSide = details.localPosition.dx <= center.dx;
  final onRightSide = !onLeftSide;
  final onBottom = !onTop;

  final panUp = details.delta.dy <= 0.0;
  final panLeft = details.delta.dx <= 0.0;
  final panRight = !panLeft;
  final panDown = !panUp;

  final yChange = details.delta.dy.abs();
  final xChange = details.delta.dx.abs();

  final verticalRotation = (onRightSide && panDown) || (onLeftSide && panUp)
      ? yChange
      : yChange * -1;

  final horizontalRotation =
      (onTop && panRight) || (onBottom && panLeft) ? xChange : xChange * -1;

  final rotationalChange = verticalRotation + horizontalRotation;

  value = value.copyWith(distance: value.distance + rotationalChange);
}