[General]: Validation focuses latest invalid field instead of first
Opened this issue · 2 comments
Is there an existing issue for this?
- I have searched the existing issues
Package/Plugin version
9.2.1
Platforms
- Android
- iOS
- Linux
- MacOS
- Web
- Windows
Flutter doctor
Flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.16.8, on macOS 14.4.1 23E224 darwin-arm64, locale en-US)
[✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
[✓] Xcode - develop for iOS and macOS (Xcode 15.3)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2023.1)
[✓] VS Code (version 1.89.1)
[✓] Connected device (4 available)
[✓] Network resources
• No issues found!
Minimal code example
Code sample
final _formKey = GlobalKey<FormState>();
Widget build(BuildContext context) {
return(Column(children: [
Form(key: _formKey, child: Column(children: [
FormBuilderTextField(
name: 'firstname',
autovalidateMode: AutovalidateMode.onUserInteraction,
initialValue: '',
onChanged: (text) {},
validator: (value) {
return 'Required';
},
),
SizedBox(height: 30, width: 30),
FormBuilderTextField(
name: "lastname",
autovalidateMode: AutovalidateMode.onUserInteraction,
initialValue: '',
onChanged: (text) {},
validator: (value) {
return 'Required';
},
),
SizedBox(height: 30, width: 30),
FormBuilderDateTimePicker(
name: "date_of_birthday",
autovalidateMode: AutovalidateMode.onUserInteraction,
inputType: InputType.date
initialDate: DateTime(DateTime.now().year - 30, 1, 1),
onChanged: (text) {},
validator: (value) {
return 'Required';
},
)
]),
TextButton(onPressed: () {_formKey.currentState?.validate() },child: Text('Submit'))
]));
Current Behavior
I have form with many FormBuilderTextFields, and some of them are required - (they have validator that checks if its value empty or not), when i am trying to submit the form, calling validation - _formKey.currentState?.validate()
, the latest invalid FormField is being focused instead of first one. In my case the latest is FormBuilderDateTimePicker, so when i pres "Submit", the date picker is being opened.
Expected Behavior
After validation, the first invalid Field in the tree should be focused.
Steps To Reproduce
Aditional information
I suppose this is not desired behaviour, but if from some unknown reason that i haven't found this is wanted. Is there at least some way to prevent date picker from opening its picker / dialog ?
I also think that this issue is related to this - #1253, where the focused were jumped to the latest input despite there were also another invalid input above
No response
Related with #1297
The solution at #1253 is still valid. I tried several things like unfocusing via a delayed future, nothing works except for that solution. uncomment or remove autovalidateMode: AutovalidateMode.always, at the field and random focussing on fields is gone.