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) {
if (_child != null) {
// Combine parent constraints with additional constraints. `null`
// maxima are unbounded, so picking the tighter of two means: the
// non-null one wins when only one side specifies a limit.
final combinedMinWidth = math.max(
constraints.minWidth,
_additionalConstraints.minWidth,
);
final combinedMaxWidth = _minNullable(
constraints.maxWidth,
_additionalConstraints.maxWidth,
);
final combinedMinHeight = math.max(
constraints.minHeight,
_additionalConstraints.minHeight,
);
final combinedMaxHeight = _minNullable(
constraints.maxHeight,
_additionalConstraints.maxHeight,
);
final childConstraints = BoxConstraints(
minWidth: combinedMaxWidth == null
? combinedMinWidth
: math.min(combinedMinWidth, combinedMaxWidth),
maxWidth: combinedMaxWidth,
minHeight: combinedMaxHeight == null
? combinedMinHeight
: math.min(combinedMinHeight, combinedMaxHeight),
maxHeight: combinedMaxHeight,
);
// Layout child with combined constraints
_child!.layout(childConstraints);
// Position child at origin
positionChild(_child!, 0, 0);
// Size ourselves to the child
size = _child!.size;
} else {
// No child, size to minimum of additional constraints
final constrainedSize = Size(
_additionalConstraints.constrainWidth(0),
_additionalConstraints.constrainHeight(0),
);
size = Size(
constraints.constrainWidth(constrainedSize.width),
constraints.constrainHeight(constrainedSize.height),
);
}
}