moveColumn method
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);
}