table static method

void table(
  1. List<String> headers,
  2. List<List<String>> rows, {
  3. String colorize(
    1. int column,
    2. String value
    )?,
})

Implementation

static void table(
  List<String> headers,
  List<List<String>> rows, {
  String Function(int column, String value)? colorize,
}) {
  if (rows.isEmpty) return;

  final widths = List<int>.generate(headers.length, (column) {
    return <String>[
      headers[column],
      for (final row in rows)
        if (column < row.length) row[column],
    ].map((value) => value.length).reduce((a, b) => a > b ? a : b);
  });

  String render(List<String> cells, {bool header = false}) {
    return List<String>.generate(headers.length, (column) {
      final value = column < cells.length ? cells[column] : '';
      final padded = value.padRight(widths[column]);
      if (header) return bold(padded);
      return colorize?.call(column, padded) ?? padded;
    }).join('  ').trimRight();
  }

  line(render(headers, header: true));
  line(dim(widths.map((width) => '─' * width).join('  ')));
  for (final row in rows) {
    line(render(row));
  }
}