performLayout method

  1. @override
Size performLayout(
  1. BoxConstraints constraints
)
override

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