layout method
Implementation
@override
void layout(BoxConstraints constraints) {
super.layout(constraints);
// Layout all children with unconstrained height.
final childConstraints = BoxConstraints(
minWidth: constraints.minWidth,
maxWidth: constraints.maxWidth,
);
var maxChildWidth = 0.0;
var totalHeight = 0.0;
var y = 0.0;
final separatorBreaks = _separatorBreaks(separator);
for (var i = 0; i < children.length; i++) {
final child = children[i];
child.layout(childConstraints);
child.offset = Offset(0, y);
maxChildWidth = math.max(maxChildWidth, child.size.width);
totalHeight += child.size.height;
y += child.size.height;
if (i < children.length - 1) {
totalHeight += separatorBreaks;
y += separatorBreaks;
}
}
// Invalidate paint cache if constraints, total height, or child count
// changed.
if (_cachedChildConstraints != childConstraints ||
_cachedTotalHeight != totalHeight ||
_cachedChildCount != children.length) {
_cachedChildPaintLines = null;
_cachedChildConstraints = childConstraints;
_cachedTotalHeight = totalHeight;
_cachedChildCount = children.length;
}
size = constraints.constrain(Size(maxChildWidth, constraints.maxHeight));
final viewportHeight = size.height.round();
final contentHeight = totalHeight.round();
if (controller is WidgetScrollController) {
(controller as WidgetScrollController).updateMetrics(
viewportExtent: viewportHeight,
contentExtent: contentHeight,
);
} else if (controller is ListViewController) {
final lvc = controller as ListViewController;
lvc.setViewportHeight(viewportHeight);
lvc.setContentHeight(contentHeight);
}
}