Incular logoIncular
API ReferenceInput & Forms

Input Formatters

Filtering and length-limiting formatters with enforcement modes.

use incular::prelude::*;
use incular::widgets::{
    FilteringTextInputFormatter, LengthLimitingTextInputFormatter, TextInputFormatter,
};

fn main() {
    let formatter = FilteringTextInputFormatter::digits_only();
    let limiter = LengthLimitingTextInputFormatter::new(3);
    let old = TextEditingValue::new("abc");
    let next = TextEditingValue::new("a1b2c3");
    let filtered = formatter.format_edit_update(&old, &next);
    let limited = limiter.format_edit_update(&old, &next);
    let show = TextEditingController::from_value(filtered);
    let show_limited = TextEditingController::from_value(limited);
    let app = Application::new(move |_cx| {
        Container::builder()
            .padding(EdgeInsets::all(24.0))
            .alignment(Alignment::CENTER)
            .child(
                Column::builder()
                    .main_axis_size(MainAxisSize::Min)
                    .spacing(8.0)
                    .children(Vec::<Widget>::from([
                        Text::new(format!(
                            "digits: {}",
                            show.text()
                        )).into(),
                        Text::new(format!(
                            "capped: {}",
                            show_limited.text()
                        )).into(),
                    ]))
                    .build(),
            )
            .build()
            .into()
    })
    .expect("valid application");
    incular::run(app).expect("run application");
}
FormatterRule
allow(predicate)Keep only matching chars
deny(predicate)Drop matching chars
digits_only()Numeric input only
single_line_formatter()Deny newlines
LengthLimitingTextInputFormatterGrapheme-aware cap with enforcement mode

MaxLengthEnforcement: None / Enforced (default) / TruncateAfterCompositionEnds. Truncation is grapheme-cluster aware with clamped selection and per-enforcement composition handling.

pub trait TextInputFormatter {
    fn format_edit_update(&self, old_value: &TextEditingValue, new_value: &TextEditingValue) -> TextEditingValue;
}

Related: FormField, TextEditingController.