Skip to content

Commit 2dd8007

Browse files
committed
On FormBuilderField validation make sure InputDecoration.errorText is not null
1 parent 90bcc6c commit 2dd8007

25 files changed

+125
-114
lines changed

example/lib/sources/complete_form.dart

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -460,16 +460,14 @@ class CompleteFormState extends State<CompleteForm> {
460460
attribute: 'photos',
461461
decoration: InputDecoration(
462462
labelText: 'Pick Photos',
463+
// errorText: 'Error Text',
463464
),
464465
maxImages: 1,
465466
),
466467
SizedBox(height: 15),
467468
FormBuilderCountryPicker(
468469
initialValue: 'Germany',
469470
attribute: 'country',
470-
valueTransformer: (value) {
471-
return value.isoCode;
472-
},
473471
decoration: InputDecoration(
474472
border: OutlineInputBorder(), labelText: 'Country'),
475473
validator: FormBuilderValidators.compose([

lib/src/fields/form_builder_checkbox.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class FormBuilderCheckbox extends FormBuilderField<bool> {
5555
return InputDecorator(
5656
decoration: decoration.copyWith(
5757
enabled: !state.readOnly,
58-
errorText: field.errorText,
58+
errorText: decoration?.errorText ?? field.errorText,
5959
),
6060
child: CheckboxListTile(
6161
dense: true,

lib/src/fields/form_builder_checkbox_list.dart

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -49,35 +49,35 @@ class FormBuilderCheckboxList<T> extends FormBuilderField<List<T>> {
4949
readOnly: readOnly,
5050
builder: (FormFieldState field) {
5151
final _FormBuilderCheckboxListState<T> state = field;
52-
List<Widget> checkboxList = [];
52+
var checkboxList = [];
5353

5454
for (var i = 0; i < options.length; i++) {
55-
checkboxList.addAll([
56-
CheckboxListTile(
57-
value: state.value.contains(options[i].value),
58-
title: options[i],
59-
onChanged: state.readOnly
60-
? null
61-
: (val) {
62-
var currentValue = [...state.value];
63-
if (!currentValue.contains(options[i].value)) {
64-
currentValue.add(options[i].value);
65-
} else {
66-
currentValue.remove(options[i].value);
67-
}
68-
state.didChange(currentValue);
69-
},
70-
dense: true,
71-
isThreeLine: false,
72-
controlAffinity: controlAffinity,
73-
// secondary: secondary,
74-
activeColor: activeColor,
75-
checkColor: checkColor,
76-
),
77-
Divider(
78-
height: 0.0,
79-
),
80-
]);
55+
checkboxList.addAll(
56+
[
57+
CheckboxListTile(
58+
value: state.value.contains(options[i].value),
59+
title: options[i],
60+
onChanged: state.readOnly
61+
? null
62+
: (val) {
63+
var currentValue = [...state.value];
64+
if (!currentValue.contains(options[i].value)) {
65+
currentValue.add(options[i].value);
66+
} else {
67+
currentValue.remove(options[i].value);
68+
}
69+
state.didChange(currentValue);
70+
},
71+
dense: true,
72+
isThreeLine: false,
73+
controlAffinity: controlAffinity,
74+
// secondary: secondary,
75+
activeColor: activeColor,
76+
checkColor: checkColor,
77+
),
78+
Divider(height: 0.0),
79+
],
80+
);
8181
}
8282
return InputDecorator(
8383
decoration: decoration.copyWith(
@@ -86,7 +86,7 @@ class FormBuilderCheckboxList<T> extends FormBuilderField<List<T>> {
8686
),
8787
child: Column(
8888
key: ObjectKey(state.value),
89-
children: checkboxList,
89+
children: List<Widget>.from(checkboxList),
9090
),
9191
);
9292
},

lib/src/fields/form_builder_chips_input.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ class FormBuilderChipsInput<T> extends FormBuilderField {
8484
enabled: !state.readOnly,
8585
decoration: decoration.copyWith(
8686
enabled: !state.readOnly,
87-
errorText: field.errorText,
87+
errorText: decoration?.errorText ?? field.errorText,
8888
),
8989
findSuggestions: findSuggestions,
9090
onChanged: (data) {

lib/src/fields/form_builder_choice_chips.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ class FormBuilderChoiceChip extends FormBuilderField<dynamic> {
8383
return InputDecorator(
8484
decoration: decoration.copyWith(
8585
enabled: !state.readOnly,
86-
errorText: field.errorText,
86+
errorText: decoration?.errorText ?? field.errorText,
8787
),
8888
child: Wrap(
8989
direction: direction,

lib/src/fields/form_builder_color_picker.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ class FormBuilderColorPickerField extends FormBuilderField<Color> {
8686
return TextField(
8787
style: style,
8888
decoration: decoration.copyWith(
89-
errorText: state.errorText,
89+
errorText: decoration?.errorText ?? field.errorText,
9090
enabled: !state.readOnly,
9191
suffixIcon: LayoutBuilder(
9292
key: ObjectKey(state.value),

lib/src/fields/form_builder_country_picker.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ class FormBuilderCountryPicker extends FormBuilderField {
8282
this.dialogSize,
8383
this.initialSelection,
8484
this.onInit,
85-
}) : // assert(initialValue != null),
85+
}) : // assert(initialValue != null),
8686
super(
8787
key: key,
8888
initialValue: initialValue,
@@ -99,7 +99,8 @@ class FormBuilderCountryPicker extends FormBuilderField {
9999

100100
return InputDecorator(
101101
decoration: decoration.copyWith(
102-
errorText: field.errorText,
102+
errorText: decoration?.errorText ?? field.errorText,
103+
enabled: !state.readOnly,
103104
),
104105
child: CountryCodePicker(
105106
onChanged: (CountryCode e) {

lib/src/fields/form_builder_date_range_picker.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ class FormBuilderDateRangePicker extends FormBuilderField {
153153
: state.effectiveFocusNode,
154154
decoration: decoration.copyWith(
155155
enabled: !state.readOnly,
156-
errorText: field.errorText,
156+
errorText: decoration?.errorText ?? field.errorText,
157157
),
158158
// initialValue: "${_initialValue ?? ''}",
159159
maxLines: maxLines,

lib/src/fields/form_builder_date_time_picker.dart

Lines changed: 66 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -198,68 +198,72 @@ class FormBuilderDateTimePicker extends FormBuilderField {
198198
this.useRootNavigator = true,
199199
this.alwaysUse24HourFormat = false,
200200
}) : super(
201-
key: key,
202-
initialValue: initialValue,
203-
attribute: attribute,
204-
validator: validator,
205-
valueTransformer: valueTransformer,
206-
// onChanged: onChanged,
207-
readOnly: readOnly,
208-
builder: (FormFieldState field) {
209-
final _FormBuilderDateTimePickerState state = field;
210-
return DateTimeField(
211-
key: state.fieldKey,
212-
initialValue: state.initialValue,
213-
format: state.dateFormat,
214-
/*onSaved: (val) {
215-
var value = _fieldKey.currentState.value;
216-
var transformed;
217-
if (valueTransformer != null) {
218-
transformed = valueTransformer(val);
219-
_formState?.setAttributeValue(attribute, transformed);
220-
} else
221-
_formState?.setAttributeValue(attribute, value);
222-
if (onSaved != null) {
223-
onSaved(transformed ?? value);
224-
}
225-
},*/
226-
validator: validator,
227-
onShowPicker: state.onShowPicker,
228-
autovalidate: autovalidate,
229-
resetIcon: resetIcon,
230-
textDirection: textDirection,
231-
textAlign: textAlign,
232-
maxLength: maxLength,
233-
autofocus: autofocus,
234-
decoration: decoration,
235-
readOnly: true,
236-
enabled: state.readOnly ? false : enabled,
237-
autocorrect: autocorrect,
238-
controller: state.textFieldController,
239-
focusNode: state.focusNode,
240-
inputFormatters: inputFormatters,
241-
keyboardType: keyboardType,
242-
maxLengthEnforced: maxLengthEnforced,
243-
maxLines: maxLines,
244-
obscureText: obscureText,
245-
showCursor: showCursor,
246-
minLines: minLines,
247-
expands: expands,
248-
style: style,
249-
onEditingComplete: onEditingComplete,
250-
buildCounter: buildCounter,
251-
cursorColor: cursorColor,
252-
cursorRadius: cursorRadius,
253-
cursorWidth: cursorWidth,
254-
enableInteractiveSelection: enableInteractiveSelection,
255-
keyboardAppearance: keyboardAppearance,
256-
onFieldSubmitted: onFieldSubmitted,
257-
scrollPadding: scrollPadding,
258-
strutStyle: strutStyle,
259-
textCapitalization: textCapitalization,
260-
textInputAction: textInputAction,
261-
);
262-
});
201+
key: key,
202+
initialValue: initialValue,
203+
attribute: attribute,
204+
validator: validator,
205+
valueTransformer: valueTransformer,
206+
// onChanged: onChanged,
207+
readOnly: readOnly,
208+
builder: (FormFieldState field) {
209+
final _FormBuilderDateTimePickerState state = field;
210+
return DateTimeField(
211+
key: state.fieldKey,
212+
initialValue: state.initialValue,
213+
format: state.dateFormat,
214+
/*onSaved: (val) {
215+
var value = _fieldKey.currentState.value;
216+
var transformed;
217+
if (valueTransformer != null) {
218+
transformed = valueTransformer(val);
219+
_formState?.setAttributeValue(attribute, transformed);
220+
} else
221+
_formState?.setAttributeValue(attribute, value);
222+
if (onSaved != null) {
223+
onSaved(transformed ?? value);
224+
}
225+
},*/
226+
validator: validator,
227+
onShowPicker: state.onShowPicker,
228+
autovalidate: autovalidate,
229+
resetIcon: resetIcon,
230+
textDirection: textDirection,
231+
textAlign: textAlign,
232+
maxLength: maxLength,
233+
autofocus: autofocus,
234+
decoration: decoration.copyWith(
235+
enabled: !state.readOnly,
236+
errorText: decoration?.errorText ?? field.errorText,
237+
),
238+
readOnly: true,
239+
enabled: state.readOnly ? false : enabled,
240+
autocorrect: autocorrect,
241+
controller: state.textFieldController,
242+
focusNode: state.focusNode,
243+
inputFormatters: inputFormatters,
244+
keyboardType: keyboardType,
245+
maxLengthEnforced: maxLengthEnforced,
246+
maxLines: maxLines,
247+
obscureText: obscureText,
248+
showCursor: showCursor,
249+
minLines: minLines,
250+
expands: expands,
251+
style: style,
252+
onEditingComplete: onEditingComplete,
253+
buildCounter: buildCounter,
254+
cursorColor: cursorColor,
255+
cursorRadius: cursorRadius,
256+
cursorWidth: cursorWidth,
257+
enableInteractiveSelection: enableInteractiveSelection,
258+
keyboardAppearance: keyboardAppearance,
259+
onFieldSubmitted: onFieldSubmitted,
260+
scrollPadding: scrollPadding,
261+
strutStyle: strutStyle,
262+
textCapitalization: textCapitalization,
263+
textInputAction: textInputAction,
264+
);
265+
},
266+
);
263267

264268
final StrutStyle strutStyle;
265269

lib/src/fields/form_builder_dropdown.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ class FormBuilderDropdown extends FormBuilderField {
7272

7373
return InputDecorator(
7474
decoration: decoration.copyWith(
75+
enabled: !state.readOnly,
7576
errorText: field.errorText,
7677
),
7778
child: DropdownButtonHideUnderline(

0 commit comments

Comments
 (0)