layout method
Implementation
@override
void layout(BoxConstraints constraints) {
super.layout(constraints);
final maxWidth =
width ??
(constraints.hasBoundedWidth ? constraints.maxWidth.round() : 0);
final boundedHeight = constraints.hasBoundedHeight
? constraints.maxHeight.round()
: null;
final viewportHeight = height ?? boundedHeight;
final separatorBreaks = _separatorBreaks(separator);
final itemCount = children.length;
if (variableHeight) {
if (_lastMaxWidth != maxWidth) {
_lastMaxWidth = maxWidth;
_clearMeasurements();
}
final baseEstimate = math
.max(1, estimatedItemExtent ?? itemExtent)
.toInt();
final estimate = _resolveAdaptiveEstimate(baseEstimate);
_syncCache(itemCount, separatorBreaks, estimate);
final contentHeight = _estimatedContentHeight(
itemCount,
separatorBreaks,
estimate,
);
final layoutHeight = viewportHeight ?? contentHeight;
_setMetrics(
viewportExtent: layoutHeight.toInt(),
contentExtent: contentHeight.toInt(),
);
size = constraints.constrain(
Size(maxWidth.toDouble(), layoutHeight.toDouble()),
);
return;
}
final itemHeight = math.max(1, itemExtent).toInt();
final contentHeight = itemCount == 0
? 0
: itemCount * itemHeight + (itemCount - 1) * separatorBreaks;
final layoutHeight = viewportHeight ?? contentHeight;
_setMetrics(
viewportExtent: layoutHeight.toInt(),
contentExtent: contentHeight.toInt(),
);
size = constraints.constrain(
Size(maxWidth.toDouble(), layoutHeight.toDouble()),
);
}