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.