Constraints go down. Sizes go up. Parent sets position.

Flutter layout can’t really be understood without knowing
this rule, so Flutter developers should learn it early on.

In more detail:

A widget gets its own constraints from its parent.
A constraint is just a set of 4 doubles:
a minimum and maximum width, and a minimum and maximum height.

Then the widget goes through its own list of children.
One by one, the widget tells its children what their
constraints are (which can be different for each child),
and then asks each child what size it wants to be.

Then, the widget positions its children
(horizontally in the x axis, and vertically in the y axis),
one by one.

And, finally, the widget tells its parent about its own size
(within the original constraints, of course).

For example, if a composed widget contains a column
with some padding, and wants to lay out its two children
as follows: