From cd94cd886acb0b7bcfc68ccb9a150a74b797f3f9 Mon Sep 17 00:00:00 2001 From: Kate Lovett Date: Tue, 26 Nov 2019 08:01:03 -0800 Subject: [PATCH] SliverOffstage Fix (#45580) --- packages/flutter/lib/src/rendering/sliver.dart | 11 +++++++++-- packages/flutter/test/widgets/slivers_test.dart | 8 ++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/flutter/lib/src/rendering/sliver.dart b/packages/flutter/lib/src/rendering/sliver.dart index aaa5e32c57..068ad5eaaf 100644 --- a/packages/flutter/lib/src/rendering/sliver.dart +++ b/packages/flutter/lib/src/rendering/sliver.dart @@ -2124,7 +2124,14 @@ class RenderSliverOffstage extends RenderSliver with RenderObjectWithChildMixin< void performLayout() { assert(child != null); child.layout(constraints, parentUsesSize: true); - geometry = child.geometry; + if (!offstage) + geometry = child.geometry; + else + geometry = const SliverGeometry( + scrollExtent: 0.0, + visible: false, + maxPaintExtent: 0.0, + ); } @override @@ -2159,7 +2166,7 @@ class RenderSliverOffstage extends RenderSliver with RenderObjectWithChildMixin< void paint(PaintingContext context, Offset offset) { if (offstage) return; - super.paint(context, offset); + context.paintChild(child, offset); } @override diff --git a/packages/flutter/test/widgets/slivers_test.dart b/packages/flutter/test/widgets/slivers_test.dart index 8fe8c4acef..98036a5455 100644 --- a/packages/flutter/test/widgets/slivers_test.dart +++ b/packages/flutter/test/widgets/slivers_test.dart @@ -454,6 +454,10 @@ void main() { expect(semantics.nodesWith(label: 'a'), hasLength(0)); expect(find.byType(Text), findsNothing); + final RenderViewport renderViewport = tester.renderObject(find.byType(Viewport)); + final RenderSliver renderSliver = renderViewport.lastChild; + expect(renderSliver.geometry.scrollExtent, 0.0); + expect(find.byType(SliverOffstage), findsNothing); }); testWidgets('offstage false', (WidgetTester tester) async { @@ -469,6 +473,10 @@ void main() { expect(semantics.nodesWith(label: 'a'), hasLength(1)); expect(find.byType(Text), findsOneWidget); + final RenderViewport renderViewport = tester.renderObject(find.byType(Viewport)); + final RenderSliver renderSliver = renderViewport.lastChild; + expect(renderSliver.geometry.scrollExtent, 14.0); + expect(find.byType(SliverOffstage), paints..paragraph()); }); });