Flutter TextFormField onChanged event - autocomplete

I want to build autocomplete using TextFormField, I don't know how to create OnChanged event for TextFormField
My requirement is there will be text field with some text, if user edits that text, textfield should behave like auto suggest.

Lucky for us the onChanged option in the TextFormField is already available. If you update flutter and doesn't work just go to the text_form_field.dart file by clicking on the Widget TextFormField + command/control and modify the text with code in the link:
text_form_field.dart

Are you wrapping TextFormField in a FormField widget? If not, I suggest to use just TextField which has an onChange property
Edit: To set an initial value you can add a TextEditingController and asign it to the TextFormField
TextEditingController _controller = TextEditingController();
then in initState() you can do
_controller.text = 'Initial Value'

Related

How to display a text in from a texfield at the same time it is being typed in flutter

I am trying to build a custom widget where it has a texfield and a Text widget where the Text widget displays the text in the texfield while the user is typing. Tried to use OnChanged of texfield but only display when the widget is refreshed.

TextFormField Focus Flutter

I have a TextFormField which is empty by default.
I'm trying to handle the change when the user finishes editing the field (i don't have a confirm button)
How to trigger a function when the TextFormField loses focus ?
You can add a FocusNode to the field and add a listener to it, within the listener you can know if it gains/loses focus.
refer to How to listen focus change in flutter?
When you say TextFormField loses focus, I am assuming that whenever the user clicks anywhere other than the TextFormField on the screen, the TextFormField loses focus.
In that case, you can wrap the entire widget with a GestureDetector and inside the onTap function
GestureDetector(
onTap: (){}, //call the function here
);

setState blocks editing of TextEditingController

I am using a TextFormField as a widget and TextEditingController inside TextFormField for a phone number, and I am trying to validate a number while typing with the flutter_libphonenumber library, which provides an async function for validation.
I am trying to change the colour of the text depending upon validation status while entering it.
Current state:
Implemented TextFormField and providing it TextEditingController as a controller with valid initial text.
Implemented onFieldSubmitted and it works fine on tap of Done button of the keyboard.
Added listener to this controller for validation and set _isValid bool there.
I have used this bool to set colour of text inside the controller while building it.
So the current issue is, when I am entering text I get proper validated status inside the listener, but the colour of text is not changing accordingly.
I understand this is happening due to not calling setState after validation, so it will rebuild the widget and change the colour according to _isValid.
Error: When I try to setState inside the listener, it just doesn't allow editing.
Note: I have tried the same approach using onChanged method and it also does same, cannot enter or delete anything inside textField if there is pre-populated text (initialText).
Can anyone help me to solve this issue, or guide the correct path?
Thank you!
You can use the Form widget's autovalidate field by doing
Form(
autovalidate: true

Auto Scroll in an empty field during validation in flutter

I have created a form in flutter and during validation (when clicking on the button) I want it to scroll up to the empty field. I have tried many ways including FocusNode and because there are many textfields, its not working. I think I am doing it the wrong way. Can someone help?
create a diffrent focusNode for each TextFormField and then
call requestFocus() on the Node when the validation is false.
first some where
final FocusNode d = FocusNode();
then in the TextFormField Widegt
focusNode: d
then in your validat
d.requestFocus();
and redo that for every TextField and not forget to check for the currect Text Field in the validator

Change value of a Text widget (NOT TextField)

I am trying to set up a text widget in my flutter app, and have the value change based on other widgets.
I can only find tips on how to change a TextField, but I don't want this to be editable by the user, only by code.
I can't set the data value of the widget, because it's final.
Is there any way to make this work in Flutter?