GridNavigator.balanced constructor

GridNavigator.balanced({
  1. required int itemCount,
  2. int? cellWidth,
  3. int? availableWidth,
  4. int? maxColumns,
  5. int initialIndex = 0,
})

Creates a balanced grid (roughly square).

Calculates columns to create a balanced grid, optionally constrained by available width and max columns.

Implementation

factory GridNavigator.balanced({
  required int itemCount,
  int? cellWidth,
  int? availableWidth,
  int? maxColumns,
  int initialIndex = 0,
}) {
  // Aim for roughly sqrt(itemCount) columns
  var cols = max(1, sqrt(itemCount).ceil());

  // Constrain by available width if provided
  if (cellWidth != null && availableWidth != null) {
    final maxByWidth = max(1, (availableWidth - 2) ~/ (cellWidth + 1));
    cols = min(cols, maxByWidth);
  }

  // Apply optional cap
  if (maxColumns != null && maxColumns > 0) {
    cols = min(cols, maxColumns);
  }

  // Cap to item count
  cols = min(cols, max(1, itemCount));

  return GridNavigator(
    itemCount: itemCount,
    columns: cols,
    initialIndex: initialIndex,
  );
}