Incular logoIncular
API ReferenceEnvironment

LayoutBuilder & Lookup Tools

Constraint-driven rebuilds plus keyed subtrees and lookup boundaries.

LayoutBuilder

Rebuilds one retained child only when incoming Constraints change.

use incular::prelude::*;

fn main() {
    let app = Application::new(|_cx| {
        LayoutBuilder::new(|_cx, constraints| {
            if constraints.max_width() > 600.0 {
                Text::new("Wide").into()
            } else {
                Text::new("Narrow").into()
            }
        }).into()
    })
    .expect("valid application");
    incular::run(app).expect("run application");
}

OrientationBuilder builds from a max_width > max_height test:

use incular::prelude::*;

fn main() {
    let app = Application::new(|_cx| {
        OrientationBuilder::new(
            |_cx, orientation: Orientation| -> Widget {
                match orientation {
                    Orientation::Portrait => Text::new("List").into(),
                    Orientation::Landscape => Text::new("Grid").into(),
                }
            },
        ).into()
    })
    .expect("valid application");
    incular::run(app).expect("run application");
}

KeyedSubtree

Attaches an explicit retained Key to a child subtree, controlling reconciliation identity.

use incular::prelude::*;

fn main() {
    let app = Application::new(|_cx| {
        KeyedSubtree::new("hero", Text::new("Hero")).into()
    })
    .expect("valid application");
    incular::run(app).expect("run application");
}

LookupBoundary

Stops typed-environment lookup from crossing the nearest boundary.

use incular::prelude::*;

fn main() {
    let boundary = LookupBoundary::new(Text::new("Hi"));
    println!("has child: {}", boundary.child().key().is_none());
    let app = Application::new(|_cx| {
        LayoutBuilder::new(|cx, _constraints| {
            let _hit: Option<String> = LookupBoundary::lookup(cx);
            Text::new("Inside").into()
        }).into()
    })
    .expect("valid application");
    incular::run(app).expect("run application");
}

Related: MediaQuery, Orientation, Constraints.

On this page