onHandleDragUpdate method

void onHandleDragUpdate({
  1. required int index,
  2. required DragUpdateDetails details,
})

Implementation

void onHandleDragUpdate({
  required int index,
  required DragUpdateDetails details,
}) {
  if (_initialLayout == null || _pointerDownPosition == null) return;

  final rtl = Directionality.of(context) == TextDirection.rtl;
  final currentPosition = widget.axis == Axis.horizontal
      ? details.globalPosition.dx
      : details.globalPosition.dy;

  var pixelDelta = (currentPosition - _pointerDownPosition!).asFixed(6);

  // Invert the offset for RTL horizontal dragging
  if (rtl && widget.axis == Axis.horizontal) {
    pixelDelta = -pixelDelta;
  }

  // Convert pixel delta to percentage of total available width.
  final delta = (pixelDelta / controller.totalAvailableWidth).asFixed(6);

  final result = controller.resize(
    delta: delta,
    initialLayout: _initialLayout!,
    pivotIndices: [index, index + 1],
  );

  switch (result) {
    case ShadResizeResult.success:
      final cursor = switch (widget.axis) {
        Axis.horizontal => SystemMouseCursors.resizeLeftRight,
        Axis.vertical => SystemMouseCursors.resizeUpDown,
      };
      mouseCursorController.cursor = cursor;
    case ShadResizeResult.failedLeading:
      final cursor = switch (widget.axis) {
        Axis.horizontal => SystemMouseCursors.resizeRight,
        Axis.vertical => SystemMouseCursors.resizeDown,
      };
      mouseCursorController.cursor = cursor;
    case ShadResizeResult.failedTrailing:
      final cursor = switch (widget.axis) {
        Axis.horizontal => SystemMouseCursors.resizeLeft,
        Axis.vertical => SystemMouseCursors.resizeUp,
      };
      mouseCursorController.cursor = cursor;
  }
}