From de2514c0e2631e33996d131e8743fbcb7bbd57c4 Mon Sep 17 00:00:00 2001 From: creativecreatorormaybenot <19204050+creativecreatorormaybenot@users.noreply.github.com> Date: Wed, 8 Jan 2020 02:48:01 +0000 Subject: [PATCH] Document reasoning for why CustomMultiChildLayout size can't depend on children and how to do it (#47797) --- packages/flutter/lib/src/rendering/custom_layout.dart | 10 +++++++++- packages/flutter/lib/src/widgets/basic.dart | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/flutter/lib/src/rendering/custom_layout.dart b/packages/flutter/lib/src/rendering/custom_layout.dart index 3262ee09a1..f290afbbda 100644 --- a/packages/flutter/lib/src/rendering/custom_layout.dart +++ b/packages/flutter/lib/src/rendering/custom_layout.dart @@ -29,7 +29,15 @@ class MultiChildLayoutParentData extends ContainerBoxParentData { /// given the previous instance. /// /// Override [getSize] to control the overall size of the layout. The size of -/// the layout cannot depend on layout properties of the children. +/// the layout cannot depend on layout properties of the children. This was +/// a design decision to simplify the delegate implementations: This way, +/// the delegate implementations do not have to also handle various intrinsic +/// sizing functions if the parent's size depended on the children. +/// If you want to build a custom layout where you define the size of that widget +/// based on its children, then you will have to create a custom render object. +/// See [MultiChildRenderObjectWidget] with [ContainerRenderObjectMixin] and +/// [RenderBoxContainerDefaultsMixin] to get started or [RenderStack] for an +/// example implementation. /// /// Override [performLayout] to size and position the children. An /// implementation of [performLayout] must call [layoutChild] exactly once for diff --git a/packages/flutter/lib/src/widgets/basic.dart b/packages/flutter/lib/src/widgets/basic.dart index eb236eb0ca..6ad28f323e 100644 --- a/packages/flutter/lib/src/widgets/basic.dart +++ b/packages/flutter/lib/src/widgets/basic.dart @@ -1955,7 +1955,7 @@ class LayoutId extends ParentDataWidget { /// the children. /// /// [CustomMultiChildLayout] is appropriate when there are complex relationships -/// between the size and positioning of a multiple widgets. To control the +/// between the size and positioning of multiple widgets. To control the /// layout of a single child, [CustomSingleChildLayout] is more appropriate. For /// simple cases, such as aligning a widget to one or another edge, the [Stack] /// widget is more appropriate.