estimateColumnWidth method
Implementation
double estimateColumnWidth(double availableWidth, TKeyValueTheme theme) {
if (width != null) {
return width!;
}
const double charWidth = 8.0;
const double basePadding = 16.0;
final headerLength = key.length;
if (widget != null) {
final finalWidth = (headerLength * charWidth) + basePadding;
return math.max(theme.minGridColWidth, math.min(finalWidth, availableWidth * 0.6));
}
final valueLength = value?.length.toDouble() ?? 0;
final maxLength = math.max(headerLength.toDouble(), valueLength);
double scaledWidth;
if (maxLength <= 32) {
scaledWidth = maxLength * charWidth;
} else if (maxLength <= 50) {
final ratio = (maxLength - 32) / 18;
scaledWidth = (32 * charWidth) + (ratio * (32 * charWidth * 0.2));
} else if (maxLength <= 60) {
final ratio = (maxLength - 50) / 10;
scaledWidth = (32 * charWidth * 1.2) + (ratio * (42 * charWidth - 32 * charWidth * 1.2));
} else {
scaledWidth = math.min(42 * charWidth, availableWidth * 0.4);
}
final finalWidth = scaledWidth + basePadding;
return math.max(theme.minGridColWidth, math.min(finalWidth, availableWidth * 0.6));
}