Incular logoIncular
API ReferenceLayout Widgets

Row

Horizontal flex layout with every alignment, direction, and spacing option.

Row lays children out horizontally. All fields are public. Defaults: main_axis_alignment Start, main_axis_size Max, cross_axis_alignment Center, text_direction None (resolves Ltr), vertical_direction Down, spacing 0.0.

Props

Prop

Type

Construction

A first Row application — copy, paste, and run:

use incular::prelude::*;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let app = Application::new(|_cx| {
        Container::builder()
            .padding(EdgeInsets::all(24.0))
            .alignment(Alignment::CENTER)
            .child(
                Row::builder()
                    .children(Vec::<Widget>::from([
                        Text::new("Left").into(),
                        Text::new("Middle").into(),
                        Text::new("Right").into(),
                    ]))
                    .main_axis_alignment(MainAxisAlignment::SpaceBetween)
                    .spacing(8.0)
                    .build(),
            )
            .build()
            .into()
    })?;
    incular::run(app)?;
    Ok(())
}

Methods

new(children) -> Self

pub fn new(children: impl IntoIterator<Item = impl Into<Widget>>) -> Self

children(...)

pub fn children(mut self, children: impl IntoIterator<Item = impl Into<Widget>>) -> Self

Replace the child list.

main_axis_alignment(alignment: MainAxisAlignment)

All variants: Start, End, Center, SpaceBetween, SpaceAround, SpaceEvenly. Getter: get_main_axis_alignment().

main_axis_size(size: MainAxisSize)

Max (default, expand to parent) / Min. Getter: get_main_axis_size().

cross_axis_alignment(alignment) and alignment alias

Start / End / Center / Stretch / Baseline. Getter: get_cross_axis_alignment().

text_direction(direction: TextDirection)

vertical_direction(direction: VerticalDirection)

spacing(spacing: f32)

Inter-item gap, clamped to max(0.0). Getter: get_spacing().

Flexible children

A weighted split with an expanding gap — copy, paste, and run:

use incular::prelude::*;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let app = Application::new(|_cx| {
        Container::builder()
            .padding(EdgeInsets::all(24.0))
            .alignment(Alignment::CENTER)
            .child(
                Column::builder()
                    .main_axis_size(MainAxisSize::Min)
                    .spacing(12.0)
                    .children(Vec::<Widget>::from([
                        Row::new(Vec::<Widget>::from([
                            Expanded::new(Text::new("Left")).flex(2).into(),
                            Expanded::new(Text::new("Right")).into(),
                        ])).into(),
                        Row::new(Vec::<Widget>::from([
                                Text::new("A").into(),
                                Spacer::new().flex(1).into(),
                                Text::new("B").into(),
                            ]))
                            .main_axis_alignment(MainAxisAlignment::Center)
                            .cross_axis_alignment(CrossAxisAlignment::Center)
                            .text_direction(TextDirection::Ltr)
                            .vertical_direction(VerticalDirection::Down).into(),
                    ]))
                    .build(),
            )
            .build()
            .into()
    })?;
    incular::run(app)?;
    Ok(())
}

See Expanded, Flexible, Spacer.

Related: Column, Flex, MainAxisAlignment.

On this page