performLayout method

  1. @override
void performLayout(
  1. Constraints constraints
)
override

Called to perform the actual layout computation for this render object.

Implementation

@override
void performLayout(Constraints constraints) {
  final boxConstraints = constraints.asBoxConstraints;

  for (final child in children) {
    setupParentData(child);
    child.layout(boxConstraints.loosen());
  }

  if (children.isEmpty) {
    size = boxConstraints.constrain(const Size(1, 1));
    return;
  }

  final availableWidth = boxConstraints.maxWidth;
  final totalSpacing = crossAxisSpacing * (crossAxisCount - 1);
  final cellWidth = (availableWidth - totalSpacing) ~/ crossAxisCount;
  final maxRowHeight = _computeMaxRowHeight();
  final rowCount = (children.length / crossAxisCount).ceil();

  _positionChildren(cellWidth, maxRowHeight);

  final totalHeight =
      rowCount * maxRowHeight + (rowCount - 1) * mainAxisSpacing;
  size = boxConstraints.constrain(Size(availableWidth, totalHeight));
}