Incular logoIncular
API ReferenceInput & Forms

FormField

Validators, submit handlers, restoration binding, and generic fields.

FormField

TypePurpose
FormFieldValidator, autovalidate, submit, restoration binding on a controller
GenericFormField<T>Same contract for arbitrary values with initial_value
RawAutocomplete<T>Option list with display-string mapping
AutofillGroupAutofill scope marker
FormFieldState<T>value, error_text, did_change, reset
use incular::prelude::*;

fn main() {
    let controller = TextEditingController::with_text("ab");
    let form = Form::new();
    let field = form
        .register(controller)
        .validator(|text| {
            if text.len() < 3 {
                Some("Too short".to_string())
            } else {
                None
            }
        })
        .autovalidate(AutovalidateMode::OnUserInteraction);
    let ok = field.validate();
    let error = field.error().unwrap_or_default();
    let app = Application::new(move |_cx| {
        Container::builder()
            .padding(EdgeInsets::all(24.0))
            .alignment(Alignment::CENTER)
            .child(Text::new(format!("valid: {ok}, error: {error}")))
            .build()
            .into()
    })
    .expect("valid application");
    incular::run(app).expect("run application");
}

Drop unregisters the field from its Form.

GenericFormField

GenericFormField::<T>::new(|value: Option<&T>| widget) with initial_value, validator, on_saved, autovalidate_mode, enabled, and restoration_id — the same contract for non-text values.

Autocomplete and groups

RawAutocomplete::new(options, display_string) with AutocompleteHighlightedOption, AutofillGroup, and UndoHistory (max_entries, 0 disables recording). FormFieldState<T>: value() / error_text() / has_error() / is_valid() / did_change(v) / reset(initial).

Related: Form, Input Formatters, UndoHistory.

On this page