onChanged property Null safety
Called when the user initiates a change to the TextField's value: when they have inserted or deleted text.
This callback doesn't run when the TextField's text is changed programmatically, via the TextField's controller. Typically it isn't necessary to be notified of such changes, since they're initiated by the app itself.
To be notified of all changes to the TextField's text, cursor, and selection, one can add a listener to its controller with TextEditingController.addListener.
onChanged is called before onSubmitted when user indicates completion of editing, such as when pressing the "done" button on the keyboard. That default behavior can be overridden. See onEditingComplete for details.
flutter create --sample=widgets.EditableText.onChanged.1 mysample
Handling emojis and other complex characters
It's important to always use characters when dealing with user input text that may contain complex characters. This will ensure that extended grapheme clusters and surrogate pairs are treated as single characters, as they appear to the user.
For example, when finding the length of some user input, use
string.characters.length
. Do NOT use string.length
or even
string.runes.length
. For the complex character "👨👩👦", this
appears to the user as a single character, and string.characters.length
intuitively returns 1. On the other hand, string.length
returns 8, and
string.runes.length
returns 5!
See also:
- inputFormatters, which are called before onChanged runs and can validate and change ("format") the input value.
- onEditingComplete, onSubmitted, onSelectionChanged: which are more specialized input change notifications.
- TextEditingController, which implements the Listenable interface and notifies its listeners on TextEditingValue changes.
Implementation
final ValueChanged<String>? onChanged;