layout method

  1. @override
void layout(
  1. BoxConstraints constraints
)
override

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