SliverAppBar with ShrinkWrap Patch (#73195)
diff --git a/packages/flutter/lib/src/rendering/viewport.dart b/packages/flutter/lib/src/rendering/viewport.dart
index f8f6980..786eb11 100644
--- a/packages/flutter/lib/src/rendering/viewport.dart
+++ b/packages/flutter/lib/src/rendering/viewport.dart
@@ -2009,19 +2009,19 @@
@override
Iterable<RenderSliver> get childrenInPaintOrder sync* {
- RenderSliver? child = firstChild;
+ RenderSliver? child = lastChild;
while (child != null) {
yield child;
- child = childAfter(child);
+ child = childBefore(child);
}
}
@override
Iterable<RenderSliver> get childrenInHitTestOrder sync* {
- RenderSliver? child = lastChild;
+ RenderSliver? child = firstChild;
while (child != null) {
yield child;
- child = childBefore(child);
+ child = childAfter(child);
}
}
}
diff --git a/packages/flutter/test/rendering/viewport_test.dart b/packages/flutter/test/rendering/viewport_test.dart
index de05617..18a2858 100644
--- a/packages/flutter/test/rendering/viewport_test.dart
+++ b/packages/flutter/test/rendering/viewport_test.dart
@@ -1746,6 +1746,49 @@
);
});
+ group('Viewport childrenInPaintOrder control test', () {
+ test('RenderViewport', () async {
+ final List<RenderSliver> children = <RenderSliver>[
+ 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<RenderSliver> children = <RenderSliver>[
+ 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(