updateMetrics method

bool updateMetrics({
  1. required int viewportExtent,
  2. required int contentExtent,
})

Updates metrics after layout. Returns true if offset was clamped.

Implementation

bool updateMetrics({
  required int viewportExtent,
  required int contentExtent,
}) {
  final prevViewport = _viewportExtent;
  final prevContent = _contentExtent;
  final prevOffset = _offset;
  final nextViewport = math.max(0, viewportExtent);
  final incomingContent = math.max(0, contentExtent);

  _viewportExtent = nextViewport;
  if (_thumbDragActive) {
    _deferredContentExtent = incomingContent;
    // Keep content extent fixed while thumb drag is active so the
    // thumb-to-offset mapping remains stable and does not remap as
    // variable-height measurements fluctuate.
  } else {
    _deferredContentExtent = null;
    _contentExtent = incomingContent;
  }

  final clamped = _clampOffset();
  if (prevViewport != _viewportExtent ||
      prevContent != _contentExtent ||
      clamped) {
    _traceScroll(
      'widget_scroll.metrics '
      'view=$prevViewport->$_viewportExtent '
      'content=$prevContent->$_contentExtent '
      'incoming=$incomingContent drag=$_thumbDragActive '
      'offset=$prevOffset->$_offset '
      'max=$maxOffset clamped=$clamped',
    );
  }
  return clamped;
}