calculateColumnWidths<T, K> static method
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,
bool isHierarchical = false,
}) {
Map<int, TableColumnWidth> columnWidths = {};
int columnIndex = 0;
if (selectable) {
columnWidths[columnIndex] = const FixedColumnWidth(50);
columnIndex++;
}
if (expandable) {
columnWidths[columnIndex] = const FixedColumnWidth(50);
columnIndex++;
}
final effectiveTreeLevel = isHierarchical && maxTreeLevel == 0 ? 1 : maxTreeLevel;
final treeIndentBonus = (isHierarchical || maxTreeLevel > 0) ? (effectiveTreeLevel * 16.0 + 36.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;
}