renderTable function
Renders rows as an aligned ASCII table (first row = header).
Implementation
String renderTable(List<List<String>> rows) {
if (rows.isEmpty) {
return '';
}
final columnCount = rows.first.length;
final widths = List<int>.filled(columnCount, 0);
for (final row in rows) {
for (var i = 0; i < columnCount; i++) {
final cell = i < row.length ? row[i] : '';
if (cell.length > widths[i]) {
widths[i] = cell.length;
}
}
}
final buffer = StringBuffer();
final separator = '+${widths.map((w) => '-' * (w + 2)).join('+')}+';
buffer.writeln(separator);
for (var r = 0; r < rows.length; r++) {
final row = rows[r];
final cells = <String>[
for (var i = 0; i < columnCount; i++)
' ${(i < row.length ? row[i] : '').padRight(widths[i])} ',
];
buffer.writeln('|${cells.join('|')}|');
if (r == 0) {
buffer.writeln(separator);
}
}
buffer.writeln(separator);
return buffer.toString();
}