Skip to content

Commit 0cc58fd

Browse files
authored
Fix assert in RenderObject.getTransformTo() (flutter#81590)
The assert was never hitting because it was first hitting a null cast error in the `renderer.parent!` line in the for loop.
1 parent 9956a35 commit 0cc58fd

File tree

2 files changed

+10
-1
lines changed

2 files changed

+10
-1
lines changed

packages/flutter/lib/src/rendering/object.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2397,8 +2397,8 @@ abstract class RenderObject extends AbstractNode with DiagnosticableTreeMixin im
23972397
}
23982398
final List<RenderObject> renderers = <RenderObject>[];
23992399
for (RenderObject renderer = this; renderer != ancestor; renderer = renderer.parent! as RenderObject) {
2400-
assert(renderer != null); // Failed to find ancestor in parent chain.
24012400
renderers.add(renderer);
2401+
assert(renderer.parent != null); // Failed to find ancestor in parent chain.
24022402
}
24032403
if (ancestorSpecified)
24042404
renderers.add(ancestor!);

packages/flutter/test/rendering/object_test.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,15 @@ void main() {
100100
expect(() => data3.detach(), throwsAssertionError);
101101
});
102102

103+
test('RenderObject.getTransformTo asserts is argument is not descendant', () {
104+
final PipelineOwner owner = PipelineOwner();
105+
final TestRenderObject renderObject1 = TestRenderObject();
106+
renderObject1.attach(owner);
107+
final TestRenderObject renderObject2 = TestRenderObject();
108+
renderObject2.attach(owner);
109+
expect(() => renderObject1.getTransformTo(renderObject2), throwsAssertionError);
110+
});
111+
103112
test('PaintingContext.pushClipRect reuses the layer', () {
104113
_testPaintingContextLayerReuse<ClipRectLayer>((PaintingContextCallback painter, PaintingContext context, Offset offset, Layer? oldLayer) {
105114
return context.pushClipRect(true, offset, Rect.zero, painter, oldLayer: oldLayer as ClipRectLayer?);

0 commit comments

Comments
 (0)