Skip to content

Commit 9dffa0b

Browse files
committed
Started working on focusNodes and Tab support
1 parent 9147a40 commit 9dffa0b

25 files changed

+62
-37
lines changed

example/lib/sources/complete_form.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,7 @@ class CompleteFormState extends State<CompleteForm> {
233233
FormBuilderValidators.max(context, 70),
234234
]),
235235
keyboardType: TextInputType.number,
236+
textInputAction: TextInputAction.next,
236237
),
237238
FormBuilderDropdown(
238239
attribute: 'gender',

lib/src/fields/form_builder_checkbox.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,15 @@ class FormBuilderCheckbox extends FormBuilderField<bool> {
1717
@required String attribute,
1818
FormFieldValidator validator,
1919
bool initialValue,
20-
bool readOnly,
21-
InputDecoration decoration,
20+
bool readOnly = false,
21+
InputDecoration decoration = const InputDecoration(),
2222
ValueChanged onChanged,
2323
ValueTransformer valueTransformer,
2424
bool enabled = true,
2525
FormFieldSetter onSaved,
2626
bool autovalidate = false,
2727
VoidCallback onReset,
28+
FocusNode focusNode,
2829
@required this.title,
2930
this.activeColor,
3031
this.checkColor,
@@ -62,6 +63,7 @@ class FormBuilderCheckbox extends FormBuilderField<bool> {
6263
onChanged: state.readOnly
6364
? null
6465
: (val) {
66+
state.requestFocus();
6567
state.didChange(val);
6668
},
6769
checkColor: checkColor,

lib/src/fields/form_builder_checkbox_list.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ class FormBuilderCheckboxList<T> extends FormBuilderField<List<T>> {
2424
FormFieldSetter onSaved,
2525
bool autovalidate = false,
2626
VoidCallback onReset,
27+
FocusNode focusNode,
2728
@required this.options,
2829
this.controlAffinity = ListTileControlAffinity.leading,
2930
this.activeColor,
@@ -61,6 +62,7 @@ class FormBuilderCheckboxList<T> extends FormBuilderField<List<T>> {
6162
} else {
6263
currentValue.remove(options[i].value);
6364
}
65+
state.requestFocus();
6466
state.didChange(currentValue);
6567
},
6668
dense: true,

lib/src/fields/form_builder_chips_input.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ class FormBuilderChipsInput<T> extends FormBuilderField<List<T>> {
1717
final bool obscureText;
1818
final double suggestionsBoxMaxHeight;
1919
final TextCapitalization textCapitalization;
20-
final FocusNode focusNode;
2120
final bool allowChipEditing;
2221
final bool autofocus;
2322
final TextOverflow textOverflow;
@@ -36,6 +35,7 @@ class FormBuilderChipsInput<T> extends FormBuilderField<List<T>> {
3635
FormFieldSetter onSaved,
3736
bool autovalidate = false,
3837
VoidCallback onReset,
38+
FocusNode focusNode,
3939
@required this.chipBuilder,
4040
@required this.suggestionBuilder,
4141
@required this.findSuggestions,
@@ -49,7 +49,6 @@ class FormBuilderChipsInput<T> extends FormBuilderField<List<T>> {
4949
this.keyboardAppearance = Brightness.light,
5050
this.obscureText = false,
5151
this.textCapitalization = TextCapitalization.none,
52-
this.focusNode,
5352
this.allowChipEditing = false,
5453
this.autofocus = false,
5554
this.textOverflow,

lib/src/fields/form_builder_choice_chips.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class FormBuilderChoiceChip<T> extends FormBuilderField<T> {
4242
FormFieldSetter onSaved,
4343
bool autovalidate = false,
4444
VoidCallback onReset,
45+
FocusNode focusNode,
4546
@required this.options,
4647
this.selectedColor,
4748
this.disabledColor,

lib/src/fields/form_builder_color_picker.dart

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ extension on Color {
2727
enum ColorPickerType { ColorPicker, MaterialPicker, BlockPicker }
2828

2929
class FormBuilderColorPickerField extends FormBuilderField<Color> {
30+
final TextEditingController controller;
31+
final ColorPickerType colorPickerType;
32+
3033
FormBuilderColorPickerField({
3134
Key key,
3235
@required String attribute,
@@ -39,8 +42,8 @@ class FormBuilderColorPickerField extends FormBuilderField<Color> {
3942
FormFieldSetter<Color> onSaved,
4043
VoidCallback onReset,
4144
this.controller,
42-
this.focusNode,
43-
this.readOnly = false,
45+
FocusNode focusNode,
46+
bool readOnly = false,
4447
this.colorPickerType = ColorPickerType.ColorPicker,
4548
InputDecoration decoration = const InputDecoration(),
4649
TextCapitalization textCapitalization = TextCapitalization.none,
@@ -141,12 +144,6 @@ class FormBuilderColorPickerField extends FormBuilderField<Color> {
141144
},
142145
);
143146

144-
final TextEditingController controller;
145-
final FocusNode focusNode;
146-
@override
147-
final bool readOnly;
148-
final ColorPickerType colorPickerType;
149-
150147
@override
151148
_FormBuilderColorPickerFieldState createState() =>
152149
_FormBuilderColorPickerFieldState();

lib/src/fields/form_builder_country_picker.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ class FormBuilderCountryPicker extends FormBuilderField<String> {
4343
FormFieldSetter onSaved,
4444
bool autovalidate = false,
4545
VoidCallback onReset,
46+
FocusNode focusNode,
4647
this.favorite = const [],
4748
this.textStyle,
4849
this.padding = const EdgeInsets.all(0.0),

lib/src/fields/form_builder_date_range_picker.dart

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ class FormBuilderDateRangePicker extends FormBuilderField {
1515
final bool obscureText;
1616
final TextStyle style;
1717
final TextEditingController controller;
18-
final FocusNode focusNode;
1918
final TextCapitalization textCapitalization;
2019
final TextInputAction textInputAction;
2120
final StrutStyle strutStyle;
@@ -61,6 +60,7 @@ class FormBuilderDateRangePicker extends FormBuilderField {
6160
FormFieldSetter onSaved,
6261
bool autovalidate = false,
6362
VoidCallback onReset,
63+
FocusNode focusNode,
6464
@required this.firstDate,
6565
@required this.lastDate,
6666
this.format,
@@ -77,7 +77,6 @@ class FormBuilderDateRangePicker extends FormBuilderField {
7777
this.keyboardType,
7878
this.style,
7979
this.controller,
80-
this.focusNode,
8180
this.textInputAction,
8281
this.strutStyle,
8382
this.textDirection,
@@ -203,21 +202,19 @@ class FormBuilderDateRangePickerState extends FormBuilderFieldState {
203202
@override
204203
void initState() {
205204
_effectiveFocusNode = widget.focusNode ?? FocusNode();
206-
_effectiveController = widget.controller ??
207-
TextEditingController(
208-
text: _valueToText(),
209-
);
205+
_effectiveController =
206+
widget.controller ?? TextEditingController(text: _valueToText());
210207
_effectiveFocusNode.addListener(_handleFocus);
211208
super.initState();
212209
}
213210

214211
Future<void> _handleFocus() async {
215212
if (_effectiveFocusNode.hasFocus) {
216213
_hideKeyboard();
217-
var initialFirstDate = value.isEmpty
214+
var initialFirstDate = value?.isEmpty ?? true
218215
? (widget.initialFirstDate ?? DateTime.now())
219216
: value[0];
220-
var initialLastDate = value.isEmpty
217+
var initialLastDate = value?.isEmpty ?? true
221218
? (widget.initialLastDate ?? initialFirstDate)
222219
: (value.length < 2 ? initialFirstDate : value[1]);
223220
final picked = await date_range_picker.showDatePicker(

lib/src/fields/form_builder_date_time_picker.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ class FormBuilderDateTimePicker extends FormBuilderField {
6969
/// `null` if [format] fails to parse the text.
7070
final ValueChanged<DateTime> onFieldSubmitted;
7171
final TextEditingController controller;
72-
final FocusNode focusNode;
7372
final TextInputType keyboardType;
7473
final TextStyle style;
7574
final TextAlign textAlign;
@@ -148,6 +147,7 @@ class FormBuilderDateTimePicker extends FormBuilderField {
148147
FormFieldSetter onSaved,
149148
bool autovalidate = false,
150149
VoidCallback onReset,
150+
FocusNode focusNode,
151151
this.inputType = InputType.both,
152152
this.scrollPadding = const EdgeInsets.all(20.0),
153153
this.cursorWidth = 2.0,
@@ -174,7 +174,6 @@ class FormBuilderDateTimePicker extends FormBuilderField {
174174
this.selectableDayPredicate,
175175
this.textDirection,
176176
this.controller,
177-
this.focusNode,
178177
this.style,
179178
this.maxLength,
180179
this.inputFormatters,

lib/src/fields/form_builder_dropdown.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ class FormBuilderDropdown<T> extends FormBuilderField<T> {
1818
final bool allowClear;
1919
final Widget clearIcon;
2020
final VoidCallback onTap;
21-
final FocusNode focusNode;
2221
final bool autofocus;
2322
final Color dropdownColor;
2423
final Color focusColor;
@@ -39,6 +38,7 @@ class FormBuilderDropdown<T> extends FormBuilderField<T> {
3938
FormFieldSetter onSaved,
4039
bool autovalidate = false,
4140
VoidCallback onReset,
41+
FocusNode focusNode,
4242
@required this.items,
4343
this.isExpanded = true,
4444
this.isDense = true,
@@ -54,7 +54,6 @@ class FormBuilderDropdown<T> extends FormBuilderField<T> {
5454
this.allowClear = false,
5555
this.clearIcon = const Icon(Icons.close),
5656
this.onTap,
57-
this.focusNode,
5857
this.autofocus = false,
5958
this.dropdownColor,
6059
this.focusColor,

0 commit comments

Comments
 (0)