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']]));