Scope for configuring FlexBox container properties.

All configuration functions are called during the layout/measure phase, not during composition. Changes to state-backed values trigger relayout, not recomposition.

See also
FlexBoxConfig

Summary

Public functions

Unit

Sets how multiple lines are aligned along the cross axis.

Cmn
Unit
alignItems(alignmentLine: AlignmentLine)

Aligns all items to a specific baseline.

Cmn
Unit
alignItems(alignmentLineBlock: (Measured) -> Int)

Aligns all items to a custom baseline computed from each measured item.

Cmn
Unit

Sets the default alignment for children along the cross axis within each line.

Cmn
Unit
columnGap(value: Dp)

Sets the horizontal spacing between columns.

Cmn
Unit

Sets the direction of the main axis along which children are laid out.

Cmn
Unit
gap(value: Dp)

Sets both rowGap and columnGap to the same value.

Cmn
Unit
gap(row: Dp, column: Dp)

Sets row and column gaps to different values.

Cmn
Unit

Sets how children are distributed along the main axis.

Cmn
Unit
rowGap(value: Dp)

Sets the vertical spacing between rows.

Cmn
Unit
wrap(value: FlexWrap)

Sets whether children should wrap to new lines when they exceed the main axis size.

Cmn

Public properties

Constraints

The layout constraints passed to this FlexBox from its parent.

Cmn

Inherited functions

From androidx.compose.ui.unit.Density
open Int

Convert Dp to Int by rounding

Cmn
open Int

Convert Sp to Int by rounding

Cmn
open Dp

Convert an Int pixel value to Dp.

Cmn
open Dp

Convert a Float pixel value to a Dp

Cmn
open DpSize

Convert a Size to a DpSize.

Cmn
open Float

Convert Dp to pixels.

Cmn
open Float

Convert Sp to pixels.

Cmn
open Rect

Convert a DpRect to a Rect.

Cmn
open Size

Convert a DpSize to a Size.

Cmn
open TextUnit

Convert an Int pixel value to Sp.

Cmn
open TextUnit

Convert a Float pixel value to a Sp

Cmn
From androidx.compose.ui.unit.FontScaling
Dp

Convert Sp to Dp.

Cmn
TextUnit

Convert Dp to Sp.

Cmn

Inherited properties

From androidx.compose.ui.unit.Density
Float

The logical density of the display.

Cmn
From androidx.compose.ui.unit.FontScaling
Float

Current user preference for the scaling factor for fonts.

Cmn

Public functions

alignContent

fun alignContent(value: FlexAlignContent): Unit

Sets how multiple lines are aligned along the cross axis.

This only applies when wrap is FlexWrap.Wrap or FlexWrap.WrapReverse and there are multiple lines of items.

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.FlexAlignContent
import androidx.compose.foundation.layout.FlexBox
import androidx.compose.foundation.layout.FlexBoxConfig
import androidx.compose.foundation.layout.FlexDirection
import androidx.compose.foundation.layout.FlexWrap
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.size
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp

// Can be extracted to a top-level FlexBoxConfig
val SpaceAroundWrap = FlexBoxConfig {
    direction(FlexDirection.Row)
    wrap(FlexWrap.Wrap)
    alignContent(FlexAlignContent.SpaceAround)
}

FlexBox(modifier = Modifier.fillMaxSize(), config = SpaceAroundWrap) {
    repeat(20) { Box(Modifier.size(80.dp).background(Color.Blue)) }
}
Parameters
value: FlexAlignContent

The align content value. Default is FlexAlignContent.Start.

alignItems

fun alignItems(alignmentLine: AlignmentLine): Unit

Aligns all items to a specific baseline.

This is equivalent to calling alignItems(FlexAlignItems.Baseline) but allows specifying which alignment line to use.

import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.FlexBox
import androidx.compose.foundation.layout.FlexBoxConfig
import androidx.compose.foundation.layout.FlexDirection
import androidx.compose.material.Text
import androidx.compose.ui.layout.FirstBaseline
import androidx.compose.ui.unit.sp

// Can be extracted to a top-level FlexBoxConfig
val BaselineRow = FlexBoxConfig {
    direction(FlexDirection.Row)
    alignItems(FirstBaseline)
}

FlexBox(config = BaselineRow) {
    Text("Small", fontSize = 12.sp)
    Text("Large", fontSize = 24.sp)
}
Parameters
alignmentLine: AlignmentLine

The alignment line to use (e.g., FirstBaseline, LastBaseline).

alignItems

fun alignItems(alignmentLineBlock: (Measured) -> Int): Unit

Aligns all items to a custom baseline computed from each measured item.

Use this when you need custom baseline calculation logic. This is same as using RowScope.alignBy and ColumnScope.alignBy

import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.FlexBox
import androidx.compose.foundation.layout.FlexDirection
import androidx.compose.material.Text
import androidx.compose.ui.Alignment
import androidx.compose.ui.layout.AlignmentLine
import androidx.compose.ui.layout.FirstBaseline
import androidx.compose.ui.unit.sp

FlexBox(
    config = {
        direction(FlexDirection.Row)
        alignItems { measured ->
            // Custom baseline: 10px below the first baseline
            val baseline = measured[FirstBaseline]
            if (baseline != AlignmentLine.Unspecified) baseline + 10
            else measured.measuredHeight
        }
    }
) {
    Text("Custom", fontSize = 14.sp)
    Text("Baseline", fontSize = 20.sp)
}
Parameters
alignmentLineBlock: (Measured) -> Int

A function that computes the baseline position from a Measured item.

See also
Measured

alignItems

fun alignItems(value: FlexAlignItems): Unit

Sets the default alignment for children along the cross axis within each line.

This controls how items are positioned perpendicular to the main axis:

Individual items can override this using FlexConfigScope.alignSelf.

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.FlexAlignItems
import androidx.compose.foundation.layout.FlexBox
import androidx.compose.foundation.layout.FlexBoxConfig
import androidx.compose.foundation.layout.FlexDirection
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.size
import androidx.compose.material.Text
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp

// Can be extracted to a top-level FlexBoxConfig
val CenteredRow = FlexBoxConfig {
    direction(FlexDirection.Row)
    alignItems(FlexAlignItems.Center)
}

FlexBox(modifier = Modifier.height(200.dp), config = CenteredRow) {
    Text("Centered")
    Box(Modifier.size(50.dp).background(Color.Blue))
}
Parameters
value: FlexAlignItems

The align items value. Default is FlexAlignItems.Start.

columnGap

fun columnGap(value: Dp): Unit

Sets the horizontal spacing between columns.

In a FlexDirection.Row layout, this is the space between items on main axis. In a FlexDirection.Column layout with FlexWrap.Wrap, this is the space between lines.

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.FlexBox
import androidx.compose.foundation.layout.FlexBoxConfig
import androidx.compose.foundation.layout.FlexDirection
import androidx.compose.foundation.layout.size
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp

// Can be extracted to a top-level FlexBoxConfig
val RowWithColumnGap = FlexBoxConfig {
    direction(FlexDirection.Row)
    columnGap(12.dp)
}

FlexBox(config = RowWithColumnGap) {
    Box(Modifier.size(50.dp).background(Color.Red))
    Box(Modifier.size(50.dp).background(Color.Green))
    Box(Modifier.size(50.dp).background(Color.Blue))
}
Parameters
value: Dp

The column gap size. Default is 0.dp.

See also
rowGap
gap

direction

fun direction(value: FlexDirection): Unit

Sets the direction of the main axis along which children are laid out.

The main axis determines the primary direction of item placement:

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.FlexBox
import androidx.compose.foundation.layout.FlexBoxConfig
import androidx.compose.foundation.layout.FlexDirection
import androidx.compose.foundation.layout.size
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp

// Can be extracted to top-level FlexBoxConfig constants
val HorizontalConfig = FlexBoxConfig { direction(FlexDirection.Row) }
val VerticalConfig = FlexBoxConfig { direction(FlexDirection.Column) }

// Horizontal layout
FlexBox(config = HorizontalConfig) {
    Box(Modifier.size(50.dp).background(Color.Red))
    Box(Modifier.size(50.dp).background(Color.Green))
    Box(Modifier.size(50.dp).background(Color.Blue))
}
Parameters
value: FlexDirection

The flex direction. Default is FlexDirection.Row.

See also
FlexDirection

gap

fun gap(value: Dp): Unit

Sets both rowGap and columnGap to the same value.

This is a convenience function for uniform spacing.

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.FlexBox
import androidx.compose.foundation.layout.FlexBoxConfig
import androidx.compose.foundation.layout.FlexDirection
import androidx.compose.foundation.layout.FlexWrap
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp

// Can be extracted to a top-level FlexBoxConfig
val WrapWithUniformGap = FlexBoxConfig {
    direction(FlexDirection.Row)
    wrap(FlexWrap.Wrap)
    gap(8.dp)
}

FlexBox(modifier = Modifier.width(200.dp), config = WrapWithUniformGap) {
    repeat(6) { Box(Modifier.size(60.dp).background(Color.Blue)) }
}
Parameters
value: Dp

The gap size to apply to both row and column gaps.

See also
rowGap
columnGap

gap

fun gap(row: Dp, column: Dp): Unit

Sets row and column gaps to different values.

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.FlexBox
import androidx.compose.foundation.layout.FlexBoxConfig
import androidx.compose.foundation.layout.FlexDirection
import androidx.compose.foundation.layout.FlexWrap
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp

// Can be extracted to a top-level FlexBoxConfig
val WrapWithDifferentGaps = FlexBoxConfig {
    direction(FlexDirection.Row)
    wrap(FlexWrap.Wrap)
    gap(row = 16.dp, column = 8.dp)
}

FlexBox(modifier = Modifier.width(200.dp), config = WrapWithDifferentGaps) {
    repeat(6) { Box(Modifier.size(60.dp).background(Color.Blue)) }
}
Parameters
row: Dp

The vertical spacing between rows.

column: Dp

The horizontal spacing between columns.

See also
rowGap
columnGap

justifyContent

fun justifyContent(value: FlexJustifyContent): Unit

Sets how children are distributed along the main axis.

This controls the spacing and positioning of items within each line:

import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.FlexBox
import androidx.compose.foundation.layout.FlexBoxConfig
import androidx.compose.foundation.layout.FlexDirection
import androidx.compose.foundation.layout.FlexJustifyContent
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.material.Text
import androidx.compose.ui.Modifier

// Can be extracted to a top-level FlexBoxConfig
val SpaceBetweenRow = FlexBoxConfig {
    direction(FlexDirection.Row)
    justifyContent(FlexJustifyContent.SpaceBetween)
}

FlexBox(modifier = Modifier.fillMaxWidth(), config = SpaceBetweenRow) {
    Text("Left")
    Text("Right")
}
Parameters
value: FlexJustifyContent

The justify content value. Default is FlexJustifyContent.Start.

rowGap

fun rowGap(value: Dp): Unit

Sets the vertical spacing between rows.

In a FlexDirection.Row layout with FlexWrap.Wrap, this is the space between lines. In a FlexDirection.Column layout, this is the space between items on main axis.

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.FlexBox
import androidx.compose.foundation.layout.FlexBoxConfig
import androidx.compose.foundation.layout.FlexDirection
import androidx.compose.foundation.layout.FlexWrap
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp

// Can be extracted to a top-level FlexBoxConfig
val WrapWithRowGap = FlexBoxConfig {
    direction(FlexDirection.Row)
    wrap(FlexWrap.Wrap)
    rowGap(16.dp)
}

FlexBox(modifier = Modifier.width(200.dp), config = WrapWithRowGap) {
    repeat(6) { Box(Modifier.size(60.dp).background(Color.Blue)) }
}
Parameters
value: Dp

The row gap size. Default is 0.dp.

See also
columnGap
gap

wrap

fun wrap(value: FlexWrap): Unit

Sets whether children should wrap to new lines when they exceed the main axis size.

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.FlexBox
import androidx.compose.foundation.layout.FlexBoxConfig
import androidx.compose.foundation.layout.FlexDirection
import androidx.compose.foundation.layout.FlexWrap
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp

// Can be extracted to a top-level FlexBoxConfig
val WrappingRow = FlexBoxConfig {
    direction(FlexDirection.Row)
    wrap(FlexWrap.Wrap)
}

// Items wrap to next line when they don't fit
FlexBox(modifier = Modifier.width(250.dp), config = WrappingRow) {
    repeat(10) { Box(Modifier.size(60.dp).background(Color.Blue)) }
}
Parameters
value: FlexWrap

The wrap behavior. Default is FlexWrap.NoWrap.

See also
FlexWrap

Public properties

constraints

val constraintsConstraints

The layout constraints passed to this FlexBox from its parent.

Use this for creating responsive layouts that adapt based on available space.

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.FlexBox
import androidx.compose.foundation.layout.FlexDirection
import androidx.compose.foundation.layout.FlexWrap
import androidx.compose.foundation.layout.size
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp

FlexBox(
    config = {
        direction(FlexDirection.Row)
        // Switch to wrapping on narrow screens
        wrap(if (constraints.maxWidth < 400.dp.roundToPx()) FlexWrap.Wrap else FlexWrap.NoWrap)
        // Adjust gap based on available space
        gap(if (constraints.maxWidth > 800.dp.roundToPx()) 16.dp else 8.dp)
    }
) {
    repeat(4) { Box(Modifier.size(80.dp).background(Color.Blue)) }
}
See also
Constraints