performBoxLayout method
Perform layout with typed box constraints
Subclasses override this instead of performLayout. The default implementation sizes to the maxima, treating an unbounded axis as the corresponding lower bound.
Implementation
@override
void performBoxLayout(BoxConstraints constraints) {
final child = this.child;
if (child == null) {
size = Size(
constraints.maxWidth ?? constraints.minWidth,
constraints.maxHeight ?? constraints.minHeight,
);
return;
}
// Align expands along bounded axes and shrink-wraps along unbounded axes.
child.layout(constraints);
final selfWidth =
constraints.maxWidth ?? constraints.constrainWidth(child.width);
final selfHeight =
constraints.maxHeight ?? constraints.constrainHeight(child.height);
size = Size(selfWidth, selfHeight);
// Calculate child position based on alignment
// Alignment coordinates: (-1, -1) = top-left, (0, 0) = center, (1, 1) = bottom-right
final childSize = child.size;
final availableWidth = size.width - childSize.width;
final availableHeight = size.height - childSize.height;
final offsetX = ((alignment.x + 1) * availableWidth / 2).round();
final offsetY = ((alignment.y + 1) * availableHeight / 2).round();
// Position child for rendering
positionChild(child, offsetX, offsetY);
}