Skip to main content

FlexChild

layout.FlexChild wraps any Component as a flex slot. It is a convenience type that lets you pass flex children directly to the variadic NewVBox / NewHBox constructors without needing a separate AddFlexChild call after construction.

Constructor

layout.NewFlexChild(child oat.Component, weight ...int) *FlexChild
  • weight is variadic and defaults to 1. The minimum effective weight is 1.

Basic usage

// Two-step pattern (without FlexChild):
vbox := layout.NewVBox(titleText)
vbox.AddFlexChild(bodyEditor, 1)
vbox.AddChild(btnRow)

// One-liner with NewFlexChild:
vbox := layout.NewVBox(
titleText,
layout.NewFlexChild(bodyEditor), // weight defaults to 1
btnRow,
)

Explicit weight

hbox := layout.NewHBox(
layout.NewFlexChild(leftPanel, 1),
layout.NewFlexChild(rightPanel, 3), // right panel gets 3× the space
)

When to use FlexChild vs AddFlexChild

They are equivalent in effect.

PreferWhen
NewFlexChildBuilding the child list inline (passing to a variadic constructor)
AddFlexChildAdding a flex child to an already-constructed box

Theme and focus propagation

FlexChild implements oat.Layout via Children(), so theme propagation and focus collection recurse into the wrapped component automatically.

Combining with AlignChild

FlexChild and AlignChild are composable. To have a flex child that is also cross-axis-aligned:

// Flex child that is also right-aligned in its slot:
vbox.AddFlexChild(
layout.NewAlignChild(myWidget, oat.HAlignRight, oat.VAlignFill),
1,
)

// Or inline:
vbox := layout.NewVBox(
layout.NewFlexChild(
layout.NewAlignChild(myWidget, oat.HAlignRight, oat.VAlignFill),
),
btnRow,
)

See AlignChild for details.