diff --git a/packages/flutter/lib/src/rendering/object.dart b/packages/flutter/lib/src/rendering/object.dart index abec953c3c..efd9e75578 100644 --- a/packages/flutter/lib/src/rendering/object.dart +++ b/packages/flutter/lib/src/rendering/object.dart @@ -464,6 +464,7 @@ abstract class RenderObject extends AbstractNode implements HitTestTarget { assert(child.parentData != null); child._cleanRelayoutSubtreeRoot(); child.parentData.detach(); + child.parentData = null; super.dropChild(child); markNeedsLayout(); _markNeedsCompositingBitsUpdate(); diff --git a/packages/unit/test/rendering/box_test.dart b/packages/unit/test/rendering/box_test.dart index 680ede0236..cac8d1d664 100644 --- a/packages/unit/test/rendering/box_test.dart +++ b/packages/unit/test/rendering/box_test.dart @@ -73,4 +73,25 @@ void main() { expect(coloredBox.size.width, equals(780.0)); expect(coloredBox.size.height, equals(580.0)); }); + + test("reparenting should clear position", () { + RenderDecoratedBox coloredBox = new RenderDecoratedBox( + decoration: new BoxDecoration()); + RenderPadding paddedBox = new RenderPadding( + child: coloredBox, padding: const EdgeDims.all(10.0)); + + layout(paddedBox); + + BoxParentData parentData = coloredBox.parentData; + expect(parentData.position.x, isNot(equals(0.0))); + + paddedBox.child = null; + RenderConstrainedBox constraintedBox = new RenderConstrainedBox( + child: coloredBox, additionalConstraints: const BoxConstraints()); + + layout(constraintedBox); + + parentData = coloredBox.parentData; + expect(parentData.position.x, equals(0.0)); + }); }