@@ -62,12 +62,10 @@ class FormBuilderField<T> extends FormField<T> {
6262 });
6363
6464 @override
65- FormBuilderFieldState <FormBuilderField <T >, T > createState () =>
66- FormBuilderFieldState <FormBuilderField <T >, T >();
65+ FormBuilderFieldState <FormBuilderField <T >, T > createState () => FormBuilderFieldState <FormBuilderField <T >, T >();
6766}
6867
69- class FormBuilderFieldState <F extends FormBuilderField <T >, T >
70- extends FormFieldState <T > {
68+ class FormBuilderFieldState <F extends FormBuilderField <T >, T > extends FormFieldState <T > {
7169 String ? _customErrorText;
7270 FormBuilderState ? _formBuilderState;
7371 bool _touched = false ;
@@ -83,21 +81,25 @@ class FormBuilderFieldState<F extends FormBuilderField<T>, T>
8381 /// Returns the initial value, which may be declared at the field, or by the
8482 /// parent [FormBuilder.initialValue] . When declared at both levels, the field
8583 /// initialValue prevails.
86- T ? get initialValue =>
87- widget.initialValue ??
88- (_formBuilderState? .initialValue ??
89- const < String , dynamic > {})[widget.name] as T ? ;
84+ T ? get initialValue => widget.initialValue ?? (_formBuilderState? .initialValue ?? const < String , dynamic > {})[widget.name] as T ? ;
9085
9186 dynamic get transformedValue => widget.valueTransformer? .call (value) ?? value;
9287
9388 @override
9489 String ? get errorText => super .errorText ?? _customErrorText;
9590
91+ @override
92+ bool get hasError => super .hasError || errorText != null ;
93+
94+ @override
95+ bool get isValid => super .isValid && errorText == null ;
96+
97+ bool get isValueValid => super .isValid;
98+ bool get valueHasError => super .hasError;
99+
96100 bool get enabled => widget.enabled && (_formBuilderState? .enabled ?? true );
97101 bool get readOnly => ! (_formBuilderState? .widget.skipDisabled ?? false );
98- bool get _isAlwaysValidate =>
99- widget.autovalidateMode.isAlways ||
100- (_formBuilderState? .widget.autovalidateMode? .isAlways ?? false );
102+ bool get _isAlwaysValidate => widget.autovalidateMode.isAlways || (_formBuilderState? .widget.autovalidateMode? .isAlways ?? false );
101103
102104 /// Will be true if the field is dirty
103105 ///
@@ -233,14 +235,9 @@ class FormBuilderFieldState<F extends FormBuilderField<T>, T>
233235 }
234236 final isValid = super .validate () && ! hasError;
235237
236- final fields = _formBuilderState? .fields ??
237- < String , FormBuilderFieldState <FormBuilderField <dynamic >, dynamic >> {};
238+ final fields = _formBuilderState? .fields ?? < String , FormBuilderFieldState <FormBuilderField <dynamic >, dynamic >> {};
238239
239- if (! isValid &&
240- focusOnInvalid &&
241- (formState? .focusOnInvalid ?? true ) &&
242- enabled &&
243- ! fields.values.any ((e) => e.effectiveFocusNode.hasFocus)) {
240+ if (! isValid && focusOnInvalid && (formState? .focusOnInvalid ?? true ) && enabled && ! fields.values.any ((e) => e.effectiveFocusNode.hasFocus)) {
244241 focus ();
245242 if (autoScrollWhenFocusOnInvalid) ensureScrollableVisibility ();
246243 }
0 commit comments