render method

void render()

Implementation

void render() {
  // We assume that the first row gives us alignment directions that
  // subsequent rows would follow.
  List<AlignmentDirection> alignments = rows
      .whereType<NormalRow>()
      .first
      .columns
      .map((v) => v is Text ? v.direction : AlignmentDirection.left)
      .toList();
  List<int> widths =
      List<int>.filled(rows.whereType<NormalRow>().first.columns.length, 0);

  // Compute max width for each column in the table.
  for (var row in rows.whereType<NormalRow>()) {
    assert(row.columns.length == widths.length);
    for (var i = 0; i < widths.length; i++) {
      widths[i] = math.max(row.columns[i].length, widths[i]);
    }
  }

  if (maxWidth > 0) {
    for (var i = 0; i < widths.length; i++) {
      widths[i] = math.min(widths[i], maxWidth);
    }
  }

  for (var row in rows) {
    print(row.render(widths, alignments));
  }
}