performLayout method

  1. @override
Size performLayout(
  1. BoxConstraints constraints
)
override

Hook for subclasses to perform layout within the given constraints.

Implementation

@override
Size performLayout(BoxConstraints constraints) {
  final table = widget as Table;
  final width = constraints.hasBoundedWidth ? constraints.maxWidth : 80;
  final height = constraints.hasBoundedHeight
      ? constraints.maxHeight
      : (table.rows.length + 2);

  final usableHeight = height - 2;
  table.adjustScroll(usableHeight);

  // Calculate column widths
  resolvedColumnWidths = List<int>.generate(table.headers.length, (c) {
    return c < table.columnWidths.length ? table.columnWidths[c] : 10;
  });

  // Compute cell offsets
  columnXOffsets = [];
  int startX = 0;
  for (var c = 0; c < table.headers.length; c++) {
    columnXOffsets.add(startX);
    startX += resolvedColumnWidths[c] + 1;
  }
  totalContentWidth = startX > 0 ? startX - 1 : 0;

  // Layout child elements
  for (var r = 0; r < table.rows.length; r++) {
    for (var c = 0; c < table.headers.length; c++) {
      final cellEl = cellElements[r][c];
      if (cellEl != null) {
        final colWidth = resolvedColumnWidths[c];
        cellEl.layout(BoxConstraints.tight(Size(colWidth, 1)));
      }
    }
  }

  return constraints.constrain(Size(width, height));
}