diff --git a/packages/flutter/lib/src/widgets/scrollable_grid.dart b/packages/flutter/lib/src/widgets/scrollable_grid.dart index 5076a00637..850cc54f43 100644 --- a/packages/flutter/lib/src/widgets/scrollable_grid.dart +++ b/packages/flutter/lib/src/widgets/scrollable_grid.dart @@ -142,7 +142,7 @@ class _GridViewportElement extends VirtualViewportElement { _materializedChildBase = (materializedRowBase * _specification.columnCount).clamp(0, renderObject.virtualChildCount); _materializedChildCount = (materializedRowLimit * _specification.columnCount).clamp(0, renderObject.virtualChildCount) - _materializedChildBase; _repaintOffsetBase = _specification.rowOffsets[materializedRowBase]; - _repaintOffsetLimit = _specification.rowOffsets[materializedRowLimit]; + _repaintOffsetLimit = _specification.rowOffsets[materializedRowLimit] - containerExtent; super.layout(constraints); diff --git a/packages/flutter/lib/src/widgets/scrollable_list.dart b/packages/flutter/lib/src/widgets/scrollable_list.dart index e3a54a688f..36d7ab25d2 100644 --- a/packages/flutter/lib/src/widgets/scrollable_list.dart +++ b/packages/flutter/lib/src/widgets/scrollable_list.dart @@ -170,7 +170,7 @@ class _ListViewportElement extends VirtualViewportElement { _materializedChildCount = materializedChildLimit - _materializedChildBase; _repaintOffsetBase = _materializedChildBase * widget.itemExtent; - _repaintOffsetLimit = materializedChildLimit * widget.itemExtent; + _repaintOffsetLimit = materializedChildLimit * widget.itemExtent - containerExtent; super.layout(constraints); diff --git a/packages/flutter/lib/src/widgets/virtual_viewport.dart b/packages/flutter/lib/src/widgets/virtual_viewport.dart index 18ccbe5bc9..5898faf4d9 100644 --- a/packages/flutter/lib/src/widgets/virtual_viewport.dart +++ b/packages/flutter/lib/src/widgets/virtual_viewport.dart @@ -69,15 +69,6 @@ abstract class VirtualViewportElement extends RenderO } } - double get _containerExtent { - switch (widget.scrollDirection) { - case ScrollDirection.vertical: - return renderObject.size.height; - case ScrollDirection.horizontal: - return renderObject.size.width; - } - } - void updateRenderObject() { renderObject.virtualChildCount = widget.children.length; @@ -89,7 +80,7 @@ abstract class VirtualViewportElement extends RenderO if (!renderObject.needsLayout) { if (repaintOffsetBase != null && widget.startOffset < repaintOffsetBase) renderObject.markNeedsLayout(); - else if (repaintOffsetLimit != null && widget.startOffset + _containerExtent > repaintOffsetLimit) + else if (repaintOffsetLimit != null && widget.startOffset > repaintOffsetLimit) renderObject.markNeedsLayout(); } }