Skip to content

Commit 3a84dca

Browse files
Implement shouldRequestFocus | Update test file (#958)
* chore: update test logic * feat: impl shouldRequestFocus on some components * fix: analyze Co-authored-by: Danvick Miller <[email protected]>
1 parent 1bfef91 commit 3a84dca

10 files changed

+237
-240
lines changed

melos.yaml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@ environment:
1111

1212
scripts:
1313
analyze: melos exec -- pub global run tuneup check
14+
1415
format: melos exec -- flutter format .
15-
test: melos exec -- flutter test
16+
17+
test: >
18+
melos exec -c 1 --fail-fast --dir-exists=test --ignore="*example*" -- \
19+
flutter test test
20+
1621
translate: melos exec --depends-on="intl_utils" -- flutter pub run intl_utils:generate

packages/form_builder_extra_fields/lib/src/fields/form_builder_chips_input.dart

Lines changed: 30 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -8,68 +8,67 @@ class FormBuilderChipsInput<T> extends FormBuilderField<List<T>> {
88
//TODO: Add documentation
99
final ChipsInputSuggestions<T> findSuggestions;
1010

11-
// final ValueChanged<List<T>> onChanged;
11+
final bool allowChipEditing;
12+
final bool autocorrect;
13+
final bool autofocus;
14+
final bool obscureText;
15+
final Brightness keyboardAppearance;
1216
final ChipsBuilder<T> chipBuilder;
1317
final ChipsBuilder<T> suggestionBuilder;
18+
final double? suggestionsBoxMaxHeight;
1419
final int? maxChips;
15-
final TextStyle? textStyle;
1620
final String? actionLabel;
17-
final bool autocorrect;
21+
final TextCapitalization textCapitalization;
1822
final TextInputAction inputAction;
1923
final TextInputType inputType;
20-
final Brightness keyboardAppearance;
21-
final bool obscureText;
22-
final double? suggestionsBoxMaxHeight;
23-
final TextCapitalization textCapitalization;
24-
final bool allowChipEditing;
25-
final bool autofocus;
2624
final TextOverflow textOverflow;
25+
final TextStyle? textStyle;
2726

2827
/// Creates a field that takes a list of `Chip`s as input and suggests more options
2928
/// while typing
3029
FormBuilderChipsInput({
3130
Key? key,
3231
//From Super
33-
required String name,
32+
AutovalidateMode autovalidateMode = AutovalidateMode.disabled,
33+
bool enabled = true,
34+
FocusNode? focusNode,
35+
FormFieldSetter<List<T>>? onSaved,
3436
FormFieldValidator<List<T>>? validator,
35-
List<T> initialValue = const [],
3637
InputDecoration decoration = const InputDecoration(),
38+
List<T> initialValue = const [],
39+
required String name,
40+
required this.chipBuilder,
41+
required this.findSuggestions,
42+
required this.suggestionBuilder,
3743
ValueChanged<List<T>?>? onChanged,
3844
ValueTransformer<List<T>?>? valueTransformer,
39-
bool enabled = true,
40-
FormFieldSetter<List<T>>? onSaved,
41-
AutovalidateMode autovalidateMode = AutovalidateMode.disabled,
4245
VoidCallback? onReset,
43-
FocusNode? focusNode,
44-
required this.chipBuilder,
45-
required this.suggestionBuilder,
46-
required this.findSuggestions,
47-
this.maxChips,
48-
this.textStyle,
4946
this.actionLabel,
50-
this.suggestionsBoxMaxHeight,
47+
this.allowChipEditing = false,
5148
this.autocorrect = false,
49+
this.autofocus = false,
5250
this.inputAction = TextInputAction.done,
5351
this.inputType = TextInputType.text,
5452
this.keyboardAppearance = Brightness.light,
53+
this.maxChips,
5554
this.obscureText = false,
55+
this.suggestionsBoxMaxHeight,
5656
this.textCapitalization = TextCapitalization.none,
57-
this.allowChipEditing = false,
58-
this.autofocus = false,
5957
this.textOverflow = TextOverflow.clip,
58+
this.textStyle,
6059
}) : super(
61-
key: key,
60+
autovalidateMode: autovalidateMode,
61+
decoration: decoration,
62+
enabled: enabled,
63+
focusNode: focusNode,
6264
initialValue: initialValue,
65+
key: key,
6366
name: name,
64-
validator: validator,
65-
valueTransformer: valueTransformer,
6667
onChanged: onChanged,
67-
autovalidateMode: autovalidateMode,
68-
onSaved: onSaved,
69-
enabled: enabled,
7068
onReset: onReset,
71-
decoration: decoration,
72-
focusNode: focusNode,
69+
onSaved: onSaved,
70+
validator: validator,
71+
valueTransformer: valueTransformer,
7372
builder: (FormFieldState<List<T>?> field) {
7473
final state = field as _FormBuilderChipsInputState<T>;
7574

packages/form_builder_extra_fields/lib/src/fields/form_builder_color_picker.dart

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,6 @@ class FormBuilderColorPickerField extends FormBuilderField<Color> {
169169
maxLines: maxLines,
170170
minLines: minLines,
171171
onEditingComplete: onEditingComplete,
172-
// onFieldSubmitted: onFieldSubmitted,
173172
showCursor: showCursor,
174173
strutStyle: strutStyle,
175174
textDirection: textDirection,
@@ -247,7 +246,6 @@ class _FormBuilderColorPickerFieldState
247246
return ColorPicker(
248247
pickerColor: value ?? Colors.transparent,
249248
onColorChanged: _colorChanged,
250-
// enableLabel: true,
251249
colorPickerWidth: 300,
252250
displayThumbColor: true,
253251
enableAlpha: true,
@@ -264,9 +262,6 @@ class _FormBuilderColorPickerFieldState
264262
return BlockPicker(
265263
pickerColor: value ?? Colors.transparent,
266264
onColorChanged: _colorChanged,
267-
/*availableColors: [],
268-
itemBuilder: ,
269-
layoutBuilder: ,*/
270265
);
271266
default:
272267
throw 'Unknown ColorPickerType';

packages/form_builder_extra_fields/lib/src/fields/form_builder_cupertino_date_time_picker.dart

Lines changed: 64 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -56,117 +56,117 @@ class FormBuilderCupertinoDateTimePicker extends FormBuilderField<DateTime> {
5656
final StrutStyle strutStyle;
5757

5858
//
59-
final Locale? locale;
60-
final DateFormat? format;
59+
final bool alwaysUse24HourFormat;
6160
final CupertinoDateTimePickerInputType inputType;
61+
final DateCancelledCallback? onCancel;
62+
final DateChangedCallback? onConfirm;
63+
final DateFormat? format;
64+
final DatePickerTheme? theme;
6265
final DateTime? firstDate;
6366
final DateTime? lastDate;
64-
final bool alwaysUse24HourFormat;
65-
final DatePickerTheme? theme;
66-
final DateChangedCallback? onConfirm;
67-
final DateCancelledCallback? onCancel;
67+
final Locale? locale;
6868

6969
FormBuilderCupertinoDateTimePicker({
7070
Key? key,
7171
//From Super
72-
required String name,
73-
FormFieldValidator<DateTime>? validator,
72+
AutovalidateMode autovalidateMode = AutovalidateMode.disabled,
73+
bool enabled = true,
7474
DateTime? initialValue,
75+
FocusNode? focusNode,
76+
FormFieldSetter<DateTime>? onSaved,
77+
FormFieldValidator<DateTime>? validator,
7578
InputDecoration decoration = const InputDecoration(),
79+
required String name,
7680
ValueChanged<DateTime?>? onChanged,
7781
ValueTransformer<DateTime?>? valueTransformer,
78-
bool enabled = true,
79-
FormFieldSetter<DateTime>? onSaved,
80-
AutovalidateMode autovalidateMode = AutovalidateMode.disabled,
8182
VoidCallback? onReset,
82-
FocusNode? focusNode,
8383
//
84-
this.locale,
84+
this.alwaysUse24HourFormat = false,
85+
this.firstDate,
8586
this.format,
8687
this.inputType = CupertinoDateTimePickerInputType.both,
87-
this.firstDate,
8888
this.lastDate,
89-
this.alwaysUse24HourFormat = false,
90-
this.theme,
91-
this.onConfirm,
89+
this.locale,
9290
this.onCancel,
91+
this.onConfirm,
92+
this.theme,
9393

9494
//TextField options
95-
this.onFieldSubmitted,
95+
this.autocorrect = false,
96+
this.autofocus = false,
97+
this.buildCounter,
9698
this.controller,
99+
this.cursorColor,
100+
this.cursorRadius,
101+
this.cursorWidth = 2.0,
102+
this.enableInteractiveSelection = false,
103+
this.expands = false,
104+
this.inputFormatters,
105+
this.keyboardAppearance,
97106
this.keyboardType = TextInputType.datetime,
98-
this.style,
99-
this.textAlign = TextAlign.start,
100-
this.autofocus = false,
101-
this.obscureText = false,
102-
this.autocorrect = false,
107+
this.maxLength,
103108
this.maxLengthEnforcement = MaxLengthEnforcement.none,
104-
this.textDirection,
105109
this.maxLines,
106-
this.maxLength,
107-
this.inputFormatters,
108-
this.strutStyle = StrutStyle.disabled,
109-
this.transitionBuilder,
110-
this.showCursor = false,
111110
this.minLines,
112-
this.expands = false,
113-
this.textInputAction,
111+
this.obscureText = false,
114112
this.onEditingComplete,
115-
this.buildCounter,
116-
this.cursorRadius,
117-
this.cursorColor,
118-
this.keyboardAppearance,
113+
this.onFieldSubmitted,
119114
this.scrollPadding = const EdgeInsets.all(20.0),
120-
this.enableInteractiveSelection = false,
121-
this.cursorWidth = 2.0,
115+
this.showCursor = false,
116+
this.strutStyle = StrutStyle.disabled,
117+
this.style,
118+
this.textAlign = TextAlign.start,
122119
this.textCapitalization = TextCapitalization.none,
120+
this.textDirection,
121+
this.textInputAction,
122+
this.transitionBuilder,
123123
}) : super(
124-
key: key,
124+
autovalidateMode: autovalidateMode,
125+
decoration: decoration,
126+
enabled: enabled,
127+
focusNode: focusNode,
125128
initialValue: initialValue,
129+
key: key,
126130
name: name,
127-
validator: validator,
128-
valueTransformer: valueTransformer,
129131
onChanged: onChanged,
130-
autovalidateMode: autovalidateMode,
131-
onSaved: onSaved,
132-
enabled: enabled,
133132
onReset: onReset,
134-
decoration: decoration,
135-
focusNode: focusNode,
133+
onSaved: onSaved,
134+
validator: validator,
135+
valueTransformer: valueTransformer,
136136
builder: (FormFieldState<DateTime?> field) {
137137
final state = field as _FormBuilderCupertinoDateTimePickerState;
138138

139139
return TextField(
140-
textDirection: textDirection,
141-
textAlign: textAlign,
142-
maxLength: maxLength,
140+
autocorrect: autocorrect,
143141
autofocus: autofocus,
142+
buildCounter: buildCounter,
143+
controller: state._textFieldController,
144+
cursorColor: cursorColor,
145+
cursorRadius: cursorRadius,
146+
cursorWidth: cursorWidth,
144147
decoration: state.decoration,
145-
readOnly: true,
146148
enabled: state.enabled,
147-
autocorrect: autocorrect,
148-
controller: state._textFieldController,
149+
enableInteractiveSelection: enableInteractiveSelection,
150+
expands: expands,
149151
focusNode: state.effectiveFocusNode,
150152
inputFormatters: inputFormatters,
153+
keyboardAppearance: keyboardAppearance,
151154
keyboardType: keyboardType,
155+
maxLength: maxLength,
156+
maxLengthEnforcement: maxLengthEnforcement,
152157
maxLines: maxLines,
153-
obscureText: obscureText,
154-
showCursor: showCursor,
155158
minLines: minLines,
156-
expands: expands,
157-
style: style,
159+
obscureText: obscureText,
158160
onEditingComplete: onEditingComplete,
159-
buildCounter: buildCounter,
160-
cursorColor: cursorColor,
161-
cursorRadius: cursorRadius,
162-
cursorWidth: cursorWidth,
163-
enableInteractiveSelection: enableInteractiveSelection,
164-
keyboardAppearance: keyboardAppearance,
161+
readOnly: true,
165162
scrollPadding: scrollPadding,
163+
showCursor: showCursor,
166164
strutStyle: strutStyle,
165+
style: style,
166+
textAlign: textAlign,
167167
textCapitalization: textCapitalization,
168+
textDirection: textDirection,
168169
textInputAction: textInputAction,
169-
maxLengthEnforcement: maxLengthEnforcement,
170170
);
171171
},
172172
);
@@ -187,9 +187,9 @@ class _FormBuilderCupertinoDateTimePickerState extends FormBuilderFieldState<
187187
super.initState();
188188
_textFieldController = widget.controller ?? TextEditingController();
189189
_dateFormat = widget.format ?? _getDefaultDateTimeFormat();
190-
final initVal = initialValue;
190+
final _initialValue = initialValue;
191191
_textFieldController.text =
192-
initVal == null ? '' : _dateFormat.format(initVal);
192+
_initialValue == null ? '' : _dateFormat.format(_initialValue);
193193
effectiveFocusNode.addListener(_handleFocus);
194194
}
195195

packages/form_builder_extra_fields/lib/src/fields/form_builder_rating_bar.dart

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import 'package:flutter_rating_bar/flutter_rating_bar.dart';
44

55
/// Field for selection of a numerical value using a star* rating widget
66
class FormBuilderRatingBar extends FormBuilderField<double> {
7+
final bool shouldRequestFocus;
8+
79
/// Defines color for glow.
810
///
911
/// Default is [ThemeData.colorScheme.secondary].
@@ -97,34 +99,35 @@ class FormBuilderRatingBar extends FormBuilderField<double> {
9799
FormBuilderRatingBar({
98100
Key? key,
99101
//From Super
100-
required String name,
101-
FormFieldValidator<double>? validator,
102+
AutovalidateMode autovalidateMode = AutovalidateMode.disabled,
103+
bool enabled = true,
102104
double? initialValue,
105+
FocusNode? focusNode,
106+
FormFieldSetter<double>? onSaved,
107+
FormFieldValidator<double>? validator,
103108
InputDecoration decoration = const InputDecoration(),
109+
required String name,
104110
ValueChanged<double?>? onChanged,
105111
ValueTransformer<double?>? valueTransformer,
106-
bool enabled = true,
107-
FormFieldSetter<double>? onSaved,
108-
AutovalidateMode autovalidateMode = AutovalidateMode.disabled,
109112
VoidCallback? onReset,
110-
FocusNode? focusNode,
111-
this.glowColor,
112-
this.maxRating,
113-
this.textDirection,
114-
this.unratedColor,
115113
this.allowHalfRating = false,
116114
this.direction = Axis.horizontal,
117115
this.glow = true,
116+
this.glowColor,
118117
this.glowRadius = 2,
119118
this.initialRating = 0.0,
120119
this.itemCount = 5,
121120
this.itemPadding = EdgeInsets.zero,
122121
this.itemSize = 40.0,
122+
this.maxRating,
123123
this.minRating = 0,
124+
this.ratingWidget,
125+
this.shouldRequestFocus = false,
124126
this.tapOnlyMode = false,
127+
this.textDirection,
128+
this.unratedColor,
125129
this.updateOnDrag = false,
126130
this.wrapAlignment = WrapAlignment.start,
127-
this.ratingWidget,
128131
}) : super(
129132
key: key,
130133
initialValue: initialValue,
@@ -153,7 +156,10 @@ class FormBuilderRatingBar extends FormBuilderField<double> {
153156
itemPadding: widget.itemPadding,
154157
// itemBuilder: widget.itemBuilder
155158
onRatingUpdate: (rating) {
156-
state.requestFocus();
159+
if (shouldRequestFocus) {
160+
state.requestFocus();
161+
}
162+
157163
field.didChange(rating);
158164
},
159165
ratingWidget: widget.ratingWidget ??

0 commit comments

Comments
 (0)