SliverOffstage Fix (#45580)

This commit is contained in:
Kate Lovett
2019-11-26 08:01:03 -08:00
committed by GitHub
parent a2c3f6c567
commit cd94cd886a
2 changed files with 17 additions and 2 deletions

View File

@@ -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

View File

@@ -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());
});
});