diff --git a/packages/flutter/lib/src/rendering/custom_layout.dart b/packages/flutter/lib/src/rendering/custom_layout.dart index f6ae9349dc..88c481f975 100644 --- a/packages/flutter/lib/src/rendering/custom_layout.dart +++ b/packages/flutter/lib/src/rendering/custom_layout.dart @@ -249,13 +249,8 @@ class RenderCustomMultiChildLayoutBox extends RenderBox return _getSize(constraints).height; } - bool get sizedByParent => true; - - void performResize() { - size = _getSize(constraints); - } - void performLayout() { + size = _getSize(constraints); delegate._callPerformLayout(size, firstChild); } diff --git a/packages/flutter/test/widget/custom_multi_child_layout_test.dart b/packages/flutter/test/widget/custom_multi_child_layout_test.dart index 900ec4d463..bf3e208e56 100644 --- a/packages/flutter/test/widget/custom_multi_child_layout_test.dart +++ b/packages/flutter/test/widget/custom_multi_child_layout_test.dart @@ -53,6 +53,19 @@ Widget buildFrame(MultiChildLayoutDelegate delegate) { ); } +class PreferredSizeDelegate extends MultiChildLayoutDelegate { + PreferredSizeDelegate({ this.preferredSize }); + + final Size preferredSize; + + Size getSize(BoxConstraints constraints) => preferredSize; + + void performLayout(Size size) { } + + bool shouldRelayout(PreferredSizeDelegate oldDelegate) { + return preferredSize != oldDelegate.preferredSize; + } +} void main() { test('Control test for CustomMultiChildLayout', () { @@ -124,4 +137,30 @@ void main() { }); }); + + test('Loose constraints', () { + testWidgets((WidgetTester tester) { + Key key = new UniqueKey(); + tester.pumpWidget(new Center( + child: new CustomMultiChildLayout( + key: key, + delegate: new PreferredSizeDelegate(preferredSize: new Size(300.0, 200.0)) + ) + )); + + RenderBox box = tester.findElementByKey(key).renderObject; + expect(box.size.width, equals(300.0)); + expect(box.size.height, equals(200.0)); + + tester.pumpWidget(new Center( + child: new CustomMultiChildLayout( + key: key, + delegate: new PreferredSizeDelegate(preferredSize: new Size(350.0, 250.0)) + ) + )); + + expect(box.size.width, equals(350.0)); + expect(box.size.height, equals(250.0)); + }); + }); }