Skip to content

Commit 7e2f53c

Browse files
committed
reintroduce existing code and add new function with needed behavior, to avoid breaking changes
1 parent 4e6812a commit 7e2f53c

File tree

1 file changed

+15
-18
lines changed

1 file changed

+15
-18
lines changed

lib/src/form_builder_field.dart

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)