performLayout method
Hook for subclasses to perform layout within the given constraints.
Implementation
@override
Size performLayout(BoxConstraints constraints) {
final column = widget as Column;
final width = constraints.maxWidth == BoxConstraints.infinity
? 0
: constraints.maxWidth;
final height = constraints.maxHeight == BoxConstraints.infinity
? 0
: constraints.maxHeight;
final area = Rect(0, 0, width, height);
// Map directly over childElements to retrieve their widgets and calculate
// constraints, avoiding index desyncs or out-of-bounds errors that could occur
// if we relied on zip-indexing between column.children and childElements.
final columnConstraints = childElements
.map(
(el) => getConstraint(
el.widget,
LayoutDirection.vertical,
crossSize: width,
element: el,
),
)
.toList();
final rects = splitRect(
area,
columnConstraints,
LayoutDirection.vertical,
mainAxisAlignment: column.mainAxisAlignment,
);
var totalHeight = 0;
for (var i = 0; i < childElements.length; i++) {
final childEl = childElements[i];
final childArea = rects[i];
final minW = column.crossAxisAlignment == CrossAxisAlignment.stretch
? width
: 0;
final childSize = childEl.layout(
BoxConstraints(
minWidth: minW,
maxWidth: width,
minHeight: childArea.height,
maxHeight: childArea.height,
),
);
childEl.relativeOffset = Offset(childArea.x, childArea.y);
totalHeight += childSize.height;
}
return Size(width, totalHeight);
}