calculateColumnWidths<T, K> static method

Map<int, TableColumnWidth> calculateColumnWidths<T, K>(
  1. List<TTableHeader<T, K>> headers,
  2. bool selectable,
  3. bool expandable, {
  4. int maxTreeLevel = 0,
})

Calculates column widths based on headers and available options.

Implementation

static Map<int, TableColumnWidth> calculateColumnWidths<T, K>(
  List<TTableHeader<T, K>> headers,
  bool selectable,
  bool expandable, {
  int maxTreeLevel = 0,
}) {
  Map<int, TableColumnWidth> columnWidths = {};
  int columnIndex = 0;

  if (selectable) {
    columnWidths[columnIndex] = const FixedColumnWidth(50);
    columnIndex++;
  }

  if (expandable) {
    columnWidths[columnIndex] = const FixedColumnWidth(50);
    columnIndex++;
  }

  final treeIndentBonus = maxTreeLevel > 0 ? (maxTreeLevel * 16.0 + 48.0) : 0.0;

  for (int i = 0; i < headers.length; i++) {
    final header = headers[i];
    final extraWidth = (i == 0) ? treeIndentBonus : 0.0;

    if (header.maxWidth != null && header.maxWidth != double.infinity) {
      columnWidths[columnIndex] = FixedColumnWidth(header.maxWidth! + extraWidth);
    } else if (header.minWidth != null && header.minWidth! > 0) {
      columnWidths[columnIndex] = FixedColumnWidth(header.minWidth! + extraWidth);
    } else {
      columnWidths[columnIndex] = FlexColumnWidth(header.flex?.toDouble() ?? 1.0);
    }
    columnIndex++;
  }

  return columnWidths;
}