resizeColumnBorder method
Resizes adjacent columns by dragging their shared border.
Parameters:
previousColumn(int, required): Index of column before border.nextColumn(int, required): Index of column after border.deltaWidth(double, required): Width change in pixels.
Returns: double — actual width change applied.
Implementation
double resizeColumnBorder(
int previousColumn, int nextColumn, double deltaWidth) {
if (previousColumn < 0 || nextColumn < 0 || deltaWidth == 0) {
return 0;
}
// make sure that both previous and next column have width enough to resize
var previousWidth = _columnWidths?[previousColumn] ?? _defaultColumnWidth;
double newPreviousWidth = previousWidth + deltaWidth;
var nextWidth = _columnWidths?[nextColumn] ?? _defaultColumnWidth;
double newNextWidth = nextWidth - deltaWidth;
double clampedPreviousWidth = newPreviousWidth.clamp(
_widthConstraints?[previousColumn]?.min ??
_defaultWidthConstraint?.min ??
0,
_widthConstraints?[previousColumn]?.max ??
_defaultWidthConstraint?.max ??
double.infinity);
double clampedNextWidth = newNextWidth.clamp(
_widthConstraints?[nextColumn]?.min ??
_defaultWidthConstraint?.min ??
0,
_widthConstraints?[nextColumn]?.max ??
_defaultWidthConstraint?.max ??
double.infinity);
double previousDelta = clampedPreviousWidth - previousWidth;
double nextDelta = clampedNextWidth - nextWidth;
// find the delta that can be applied to both columns
double delta = _absClosestTo(previousDelta, -nextDelta, 0);
newPreviousWidth = previousWidth + delta;
newNextWidth = nextWidth - delta;
_columnWidths ??= {};
_columnWidths![previousColumn] = newPreviousWidth;
_columnWidths![nextColumn] = newNextWidth;
notifyListeners();
return delta;
}