Skip to content

Commit 990d009

Browse files
committed
Request focus for non-text-based on after change to avoid jumping
Removes focus from textfield thus avoiding the the situation where focus goes back to last textfield after field is changed. Especially problematic for DropdownButton: Source of hack: https://stackoverflow.com/questions/51534205/flutter-android-moving-focus-from-a-dropdownbutton-to-a-textfield?answertab=active#tab-top
1 parent e5a321e commit 990d009

11 files changed

+14
-0
lines changed

lib/src/fields/form_builder_checkbox.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ class _FormBuilderCheckboxState extends State<FormBuilderCheckbox> {
5555
onChanged: _readonly
5656
? null
5757
: (bool value) {
58+
FocusScope.of(context).requestFocus(FocusNode());
5859
field.didChange(value);
5960
if (widget.onChanged != null) widget.onChanged(value);
6061
},
@@ -107,6 +108,7 @@ class _FormBuilderCheckboxState extends State<FormBuilderCheckbox> {
107108
onTap: _readonly
108109
? null
109110
: () {
111+
FocusScope.of(context).requestFocus(FocusNode());
110112
bool newValue = !(field.value ?? false);
111113
field.didChange(newValue);
112114
if (widget.onChanged != null) widget.onChanged(newValue);

lib/src/fields/form_builder_checkbox_list.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ class _FormBuilderCheckboxListState extends State<FormBuilderCheckboxList> {
5656
onChanged: _readonly
5757
? null
5858
: (bool value) {
59+
FocusScope.of(context).requestFocus(FocusNode());
5960
var currValue = field.value;
6061
if (value)
6162
currValue.add(widget.options[i].value);

lib/src/fields/form_builder_chips_input.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ class _FormBuilderChipsInputState extends State<FormBuilderChipsInput> {
8989
),
9090
findSuggestions: widget.findSuggestions,
9191
onChanged: (data) {
92+
FocusScope.of(context).requestFocus(FocusNode());
9293
field.didChange(data);
9394
if (widget.onChanged != null) widget.onChanged(data);
9495
},

lib/src/fields/form_builder_dropdown.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,11 @@ class _FormBuilderDropdownState extends State<FormBuilderDropdown> {
100100
onChanged: _readonly
101101
? null
102102
: (value) {
103+
FocusScope.of(context).requestFocus(FocusNode());
103104
field.didChange(value);
104105
if (widget.onChanged != null) widget.onChanged(value);
105106
},
107+
//TODO: add icon, enabledColor, disabledColor
106108
),
107109
);
108110
},

lib/src/fields/form_builder_radio.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ class _FormBuilderRadioState extends State<FormBuilderRadio> {
5656
onChanged: _readonly
5757
? null
5858
: (dynamic value) {
59+
FocusScope.of(context).requestFocus(FocusNode());
5960
field.didChange(value);
6061
if (widget.onChanged != null) widget.onChanged(value);
6162
},

lib/src/fields/form_builder_rate.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ class _FormBuilderRateState extends State<FormBuilderRate> {
8787
onTap: _readonly
8888
? null
8989
: (value) {
90+
FocusScope.of(context).requestFocus(FocusNode());
9091
field.didChange(value);
9192
if (widget.onChanged != null) widget.onChanged(value);
9293
},

lib/src/fields/form_builder_segmented_control.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ class _FormBuilderSegmentedControlState
100100
),
101101
),
102102
onValueChanged: (dynamic value) {
103+
FocusScope.of(context).requestFocus(FocusNode());
103104
if (_readonly) {
104105
field.reset();
105106
} else {

lib/src/fields/form_builder_signature_pad.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ class _FormBuilderSignaturePadState extends State<FormBuilderSignaturePad> {
111111
penColor: widget.penColor,
112112
penStrokeWidth: widget.penStrokeWidth,
113113
onChanged: (points) async {
114+
FocusScope.of(context).requestFocus(FocusNode());
114115
var signature =
115116
await _signatureKey.currentState.exportBytes();
116117
setState(() {

lib/src/fields/form_builder_slider.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ class _FormBuilderSliderState extends State<FormBuilderSlider> {
9090
onChanged: _readonly
9191
? null
9292
: (num value) {
93+
FocusScope.of(context).requestFocus(FocusNode());
9394
field.didChange(value);
9495
if (widget.onChanged != null) widget.onChanged(value);
9596
},

lib/src/fields/form_builder_stepper.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ class _FormBuilderStepperState extends State<FormBuilderStepper> {
8989
onChange: _readonly
9090
? null
9191
: (value) {
92+
FocusScope.of(context).requestFocus(FocusNode());
9293
field.didChange(value);
9394
if (widget.onChanged != null) widget.onChanged(value);
9495
},

0 commit comments

Comments
 (0)