diff --git a/packages/flutter/lib/src/widgets/lazy_block.dart b/packages/flutter/lib/src/widgets/lazy_block.dart index 587851f6b4..e5727c4390 100644 --- a/packages/flutter/lib/src/widgets/lazy_block.dart +++ b/packages/flutter/lib/src/widgets/lazy_block.dart @@ -616,7 +616,7 @@ class _LazyBlockElement extends RenderObjectElement { newElement = inflateWidget(newWidget, previousChild); }, building: true); if (newElement == null) - return; + break; _children.add(newElement); } child = _getNextWithin(block, child); diff --git a/packages/flutter/test/widget/lazy_block_viewport_test.dart b/packages/flutter/test/widget/lazy_block_viewport_test.dart index 41050fdcb1..c4a2a03bd7 100644 --- a/packages/flutter/test/widget/lazy_block_viewport_test.dart +++ b/packages/flutter/test/widget/lazy_block_viewport_test.dart @@ -279,4 +279,31 @@ void main() { }); }); + test('Underflow extents', () { + testWidgets((WidgetTester tester) { + double lastContentExtent; + double lastContainerExtent; + double lastMinScrollOffset; + void handleExtendsChanged(double contentExtent, double containerExtent, double minScrollOffset) { + lastContentExtent = contentExtent; + lastContainerExtent = containerExtent; + lastMinScrollOffset = minScrollOffset; + } + + tester.pumpWidget(new LazyBlockViewport( + onExtentsChanged: handleExtendsChanged, + delegate: new LazyBlockChildren( + children: [ + new Container(height: 100.0), + new Container(height: 100.0), + new Container(height: 100.0), + ] + ) + )); + + expect(lastContentExtent, equals(300.0)); + expect(lastContainerExtent, equals(600.0)); + expect(lastMinScrollOffset, equals(0.0)); + }); + }); }