diff --git a/packages/flutter/lib/src/rendering/viewport.dart b/packages/flutter/lib/src/rendering/viewport.dart index f8f6980baa..786eb11fe9 100644 --- a/packages/flutter/lib/src/rendering/viewport.dart +++ b/packages/flutter/lib/src/rendering/viewport.dart @@ -2009,19 +2009,19 @@ class RenderShrinkWrappingViewport extends RenderViewportBase get childrenInPaintOrder sync* { - RenderSliver? child = firstChild; - while (child != null) { - yield child; - child = childAfter(child); - } - } - - @override - Iterable get childrenInHitTestOrder sync* { RenderSliver? child = lastChild; while (child != null) { yield child; child = childBefore(child); } } + + @override + Iterable get childrenInHitTestOrder sync* { + RenderSliver? child = firstChild; + while (child != null) { + yield child; + child = childAfter(child); + } + } } diff --git a/packages/flutter/test/rendering/viewport_test.dart b/packages/flutter/test/rendering/viewport_test.dart index de0561744f..18a2858c5b 100644 --- a/packages/flutter/test/rendering/viewport_test.dart +++ b/packages/flutter/test/rendering/viewport_test.dart @@ -1746,6 +1746,49 @@ void main() { ); }); + group('Viewport childrenInPaintOrder control test', () { + test('RenderViewport', () async { + final List children = [ + RenderSliverToBoxAdapter(), + RenderSliverToBoxAdapter(), + RenderSliverToBoxAdapter(), + ]; + + final RenderViewport renderViewport = RenderViewport( + crossAxisDirection: AxisDirection.right, + offset: ViewportOffset.zero(), + children: children, + ); + + // Children should be painted in reverse order to the list given + expect(renderViewport.childrenInPaintOrder, equals(children.reversed)); + // childrenInPaintOrder should be reverse of childrenInHitTestOrder + expect(renderViewport.childrenInPaintOrder, + equals(renderViewport.childrenInHitTestOrder.toList().reversed)); + }); + + test('RenderShrinkWrappingViewport', () async { + final List children = [ + RenderSliverToBoxAdapter(), + RenderSliverToBoxAdapter(), + RenderSliverToBoxAdapter(), + ]; + + final RenderShrinkWrappingViewport renderViewport = + RenderShrinkWrappingViewport( + crossAxisDirection: AxisDirection.right, + offset: ViewportOffset.zero(), + children: children, + ); + + // Children should be painted in reverse order to the list given + expect(renderViewport.childrenInPaintOrder, equals(children.reversed)); + // childrenInPaintOrder should be reverse of childrenInHitTestOrder + expect(renderViewport.childrenInPaintOrder, + equals(renderViewport.childrenInHitTestOrder.toList().reversed)); + }); + }); + testWidgets('Handles infinite constraints when TargetPlatform is iOS or macOS', (WidgetTester tester) async { // regression test for https://github.com/flutter/flutter/issues/45866 await tester.pumpWidget(