SliverOffstage Fix (#45580)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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());
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user