moveColumn method

  1. @override
void moveColumn({
  1. required PlutoColumn column,
  2. required PlutoColumn targetColumn,
})
inherited

Move column position to targetColumn.

In case of column.frozen.isNone and targetColumn.frozen.isFroze, If the width constraint of a frozen column is narrow, it cannot be moved.

Implementation

@override
void moveColumn({
  required PlutoColumn column,
  required PlutoColumn targetColumn,
}) {
  if (limitMoveColumn(column: column, targetColumn: targetColumn)) {
    return;
  }

  final foundIndexes = _findIndexOfColumns([column, targetColumn]);

  if (foundIndexes.length != 2) {
    return;
  }

  int index = foundIndexes[0];

  int targetIndex = foundIndexes[1];

  final frozen = refColumns[index].frozen;

  final targetFrozen = refColumns[targetIndex].frozen;

  if (frozen != targetFrozen) {
    if (targetFrozen.isEnd && index > targetIndex) {
      targetIndex += 1;
    } else if (targetFrozen.isStart && index < targetIndex) {
      targetIndex -= 1;
    } else if (frozen.isStart && index > targetIndex) {
      targetIndex += 1;
    } else if (frozen.isEnd && index < targetIndex) {
      targetIndex -= 1;
    }
  }

  refColumns[index].frozen = targetFrozen;

  var columnToMove = refColumns[index];

  refColumns.removeAt(index);

  refColumns.insert(targetIndex, columnToMove);

  updateCurrentCellPosition(notify: false);

  resetShowFrozenColumn();

  if (!columnSizeConfig.restoreAutoSizeAfterMoveColumn) {
    deactivateColumnsAutoSize();
  }

  updateVisibilityLayout();

  if (onColumnsMoved != null) {
    onColumnsMoved!(PlutoGridOnColumnsMovedEvent(
      idx: targetIndex,
      visualIdx: columnIndex(columnToMove)!,
      columns: [columnToMove],
    ));
  }

  notifyListeners(true, moveColumn.hashCode);
}