Dart aligned plain-text CLI table renderer
Dart
import 'dart:io';
String renderTable(List<String> headers, List<List<String>> rows) {
final all = [headers, ...rows];
final widths = List<int>.generate(headers.length, (i) {
var w = 0;
for (final row in all) {
if (i < row.length && row[i].length > w) w = row[i].length;
}
return w;
});
String line(List<String> cells) => cells
.asMap()
.entries
.map((e) => e.value.padRight(widths[e.key]))
.join(' ')
.trimRight();
final sep = widths.map((w) => '-' * w).join(' ');
return [line(headers), sep, ...rows.map(line)].join('\n');
}
void main() => stdout.writeln(renderTable(['id', 'name'], [['1', 'Ada'], ['22', 'Linus']]));