handleDragUpdate method

bool handleDragUpdate({
  1. required PointerMoveEvent pointerMoveEvent,
  2. required List<int> lockedIndices,
})

Implementation

bool handleDragUpdate({
  required PointerMoveEvent pointerMoveEvent,
  required List<int> lockedIndices,
}) {
  final draggedKey = draggedEntity?.key;
  if (draggedKey == null) return false;

  final localOffset = pointerMoveEvent.localPosition;
  late final Offset offset;

  if (_isScrollableOutside) {
    offset = localOffset + scrollOffset;
  } else {
    offset = localOffset + (scrollOffset - _startDraggingScrollOffset);
  }

  final collisionReorderableEntity = _getCollisionReorderableEntity(
    keyValue: draggedKey.value,
    draggedOffset: offset,
  );
  final collisionOrderId = collisionReorderableEntity?.updatedOrderId;

  if (collisionOrderId != null && !lockedIndices.contains(collisionOrderId)) {
    final draggedOrderId = _draggedEntity!.updatedOrderId;
    final difference = draggedOrderId - collisionOrderId;

    if (difference > 1 || difference < -1) {
      // print('_draggedEntity $_draggedEntity');
    }

    if (difference > 1) {
      _updateMultipleCollisions(
        collisionReorderableEntity: collisionReorderableEntity!,
        draggedKey: draggedKey,
        isBackwards: true,
        lockedIndices: lockedIndices,
      );
    } else if (difference < -1) {
      _updateMultipleCollisions(
        collisionReorderableEntity: collisionReorderableEntity!,
        draggedKey: draggedKey,
        isBackwards: false,
        lockedIndices: lockedIndices,
      );
    } else {
      _updateCollision(
        collisionReorderableEntity: collisionReorderableEntity!,
        lockedIndices: lockedIndices,
      );
    }
    return true;
  }

  return false;
}