table method

void table(
  1. List<String> headers,
  2. List<List<String>> rows
)

Adds aligned columns with a dimmed header row.

Implementation

void table(List<String> headers, List<List<String>> rows) {
  final List<int> widths = [
    for (final String header in headers) header.length,
  ];
  for (final List<String> row in rows) {
    for (int i = 0; i < row.length && i < widths.length; i++) {
      if (row[i].length > widths[i]) widths[i] = row[i].length;
    }
  }
  String render(List<String> cells) {
    final StringBuffer buffer = StringBuffer();
    for (int i = 0; i < widths.length; i++) {
      final String cell = i < cells.length ? cells[i] : '';
      buffer.write(
        i == widths.length - 1 ? cell : cell.padRight(widths[i] + 2),
      );
    }
    return buffer.toString().trimRight();
  }

  _add(LiveTone.note, render(headers));
  for (final List<String> row in rows) {
    _add(LiveTone.plain, render(row));
  }
}