updateMetrics method
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;
}