Incular logoIncular
API ReferenceInput & Forms

Focus

Focus nodes, scopes, traversal, and exclusion with every method.

Focus

WidgetPurpose
FocusAttach node, autofocus, and request policy to a subtree
FocusScopeScope with traversal policy (WidgetOrder / ReadingOrder / Ordered)
FocusTraversalGroupOverride policy for a region (default ReadingOrder)
FocusTraversalOrderExplicit numeric order (order, non-finite clears)
ExcludeFocusRemove subtree from focus order
ExcludeFocusTraversalRemove subtree from traversal only
use incular::prelude::*;

fn main() {
    let app = Application::new(|_cx| {
        Container::builder()
            .padding(EdgeInsets::all(24.0))
            .alignment(Alignment::CENTER)
            .child(
                FocusScope::new(
                    Column::builder()
                        .main_axis_size(MainAxisSize::Min)
                        .spacing(8.0)
                        .children(Vec::<Widget>::from([
                            Focus::new(Text::new("First")).autofocus(true).into(),
                            Focus::new(Text::new("Second")).into(),
                        ]))
                        .build(),
                )
                .autofocus(true),
            )
            .build()
            .into()
    })
    .expect("valid application");
    incular::run(app).expect("run application");
}

Without an explicit node but with autofocus or can_request_focus = false, Focus creates one internally. Fully default Focus returns the child unchanged.

FocusScope

autofocus, policy(FocusTraversalPolicyKind::WidgetOrder), reading_order(), widget_order(), ordered() — exercised in the runnable program above.

Traversal and exclusion

use incular::prelude::*;

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

FocusTraversalPolicy trait (find_first/last_focus, next, previous) with WidgetOrderTraversalPolicy / ReadingOrderTraversalPolicy / OrderedTraversalPolicy (explicit numeric order) implementations.

FocusScopeNode, FocusNode, FocusManager, and traversal policies (Ordered, ReadingOrder, WidgetOrder) live in incular-gestures. BuildContext::watch_focus_scope(&scope) subscribes a build to scope changes.

Related: Keyboard, GestureDetector.

On this page