performBoxLayout method

  1. @override
void performBoxLayout(
  1. BoxConstraints constraints
)
override

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);
}