printTable method

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

Implementation

void printTable(List<String> headers, List<List<String>> rows) {
  if (silent) return;
  _clearSpinner();

  // Very basic table formatting for now
  if (rows.isEmpty) {
    stdout.writeln('No data available.');
    return;
  }

  List<int> columnWidths = List.filled(headers.length, 0);
  for (int i = 0; i < headers.length; i++) {
    columnWidths[i] = headers[i].length;
  }

  for (var row in rows) {
    for (int i = 0; i < row.length; i++) {
      if (i < columnWidths.length && row[i].length > columnWidths[i]) {
        columnWidths[i] = row[i].length;
      }
    }
  }

  String formatRow(List<String> row) {
    String result = '|';
    for (int i = 0; i < row.length; i++) {
      if (i < columnWidths.length) {
        result += ' ${row[i].padRight(columnWidths[i])} |';
      }
    }
    return result;
  }

  String separator = '+';
  for (var width in columnWidths) {
    separator += '${''.padRight(width + 2, '-')}+';
  }

  stdout.writeln(separator);
  stdout.writeln(formatRow(headers));
  stdout.writeln(separator);
  for (var row in rows) {
    stdout.writeln(formatRow(row));
  }
  stdout.writeln(separator);
}