resizeColumnBorder method

double resizeColumnBorder(
  1. int previousColumn,
  2. int nextColumn,
  3. double deltaWidth
)

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;
}