performLayout method
Hook for subclasses to perform layout within the given constraints.
Implementation
@override
Size performLayout(BoxConstraints constraints) {
final align = widget as Align;
if (childElement != null) {
final childConstraints = BoxConstraints(
minWidth: 0,
maxWidth: constraints.maxWidth,
minHeight: 0,
maxHeight: constraints.maxHeight,
);
final childSize = childElement!.layout(childConstraints);
final parentWidth = align.widthFactor != null
? (childSize.width * align.widthFactor!).round().clamp(
constraints.minWidth,
constraints.maxWidth,
)
: (constraints.maxWidth == BoxConstraints.infinity
? childSize.width
: constraints.maxWidth);
final parentHeight = align.heightFactor != null
? (childSize.height * align.heightFactor!).round().clamp(
constraints.minHeight,
constraints.maxHeight,
)
: (constraints.maxHeight == BoxConstraints.infinity
? childSize.height
: constraints.maxHeight);
final childWidth = childSize.width.clamp(0, parentWidth);
final childHeight = childSize.height.clamp(0, parentHeight);
final double remainingWidth = (parentWidth - childWidth).toDouble();
final int offsetX = (remainingWidth * (align.alignment.x + 1.0) / 2.0)
.round();
final double remainingHeight = (parentHeight - childHeight).toDouble();
final int offsetY = (remainingHeight * (align.alignment.y + 1.0) / 2.0)
.round();
childElement!.relativeOffset = Offset(offsetX, offsetY);
return Size(parentWidth, parentHeight);
}
return constraints.constrain(Size.zero);
}