layout method

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

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