dumpTable static method

String dumpTable(
  1. Iterable rows
)

Implementation

static String dumpTable(Iterable rows) {
  rows = _asList(rows);
  var mapRows = _asListMap(rows as List<dynamic>);
  var keys = _allKeys(mapRows);
  var colSizes = <String, int>{};

  for (var k in keys) {
    var max = k.length;
    for (var row in mapRows) {
      var col = row![k];
      if (col != null) {
        var valSize = "$col".length;
        if (valSize > max) {
          max = valSize;
        }
      }
    }
    colSizes[k] = max;
  }

  // sum + ' padding ' + |
  int rowWidth = colSizes.values.fold(0, (dynamic p, c) => p + c) +
      (colSizes.length * 2) +
      (colSizes.length + 1);
  var sb = <String>[];
  sb.add("+${'-' * (rowWidth - 2)}+");
  var head = '|';
  for (var k in keys) {
    head += '${_alignCenter(k, colSizes[k]!)}|';
  }
  sb.add(head);
  sb.add("|${'-' * (rowWidth - 2)}|");

  for (var row in mapRows) {
    var to = '|';
    for (var k in keys) {
      to += '${_alignAuto(row![k], colSizes[k]!)}|';
    }
    sb.add(to);
  }

  sb.add("+${'-' * (rowWidth - 2)}+");

  return sb.join('\n');
}