Skip to content

Commit 9ba6c01

Browse files
committed
Avoid setting readOnly and initialValue in initState to allow for state changes. Closes #515
1 parent b52895e commit 9ba6c01

File tree

1 file changed

+8
-13
lines changed

1 file changed

+8
-13
lines changed

lib/src/form_builder_field.dart

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -76,15 +76,19 @@ class FormBuilderField<T> extends FormField<T> {
7676
FormBuilderFieldState<T> createState() => FormBuilderFieldState();
7777
}
7878

79-
class FormBuilderFieldState<T> extends FormFieldState<T> with AfterInitMixin{
79+
class FormBuilderFieldState<T> extends FormFieldState<T> with AfterInitMixin {
8080
@override
8181
FormBuilderField<T> get widget => super.widget;
8282

8383
FormBuilderState get formState => _formBuilderState;
8484

85-
bool get readOnly => _readOnly;
85+
bool get readOnly => _formBuilderState?.readOnly == true || widget.readOnly;
8686

87-
T get initialValue => _initialValue;
87+
T get initialValue =>
88+
widget.initialValue ??
89+
((_formBuilderState?.initialValue?.containsKey(widget.name) ?? false)
90+
? _formBuilderState.initialValue[widget.name]
91+
: null);
8892

8993
FormBuilderState _formBuilderState;
9094

@@ -94,12 +98,8 @@ class FormBuilderFieldState<T> extends FormFieldState<T> with AfterInitMixin{
9498
@override
9599
bool get isValid => super.isValid && widget.decoration?.errorText == null;
96100

97-
bool _readOnly = false;
98-
99101
bool _touched = false;
100102

101-
T _initialValue;
102-
103103
FocusNode _focusNode;
104104

105105
FocusNode get effectiveFocusNode =>
@@ -109,13 +109,8 @@ class FormBuilderFieldState<T> extends FormFieldState<T> with AfterInitMixin{
109109
void didInitState() {
110110
_formBuilderState = FormBuilder.of(context);
111111
_formBuilderState?.registerField(widget.name, this);
112-
_readOnly = _formBuilderState?.readOnly == true || widget.readOnly;
113-
_initialValue = widget.initialValue ??
114-
((_formBuilderState?.initialValue?.containsKey(widget.name) ?? false)
115-
? _formBuilderState.initialValue[widget.name]
116-
: null);
117112
effectiveFocusNode.addListener(setTouchedHandler);
118-
setValue(_initialValue);
113+
setValue(initialValue);
119114
}
120115

121116
@override

0 commit comments

Comments
 (0)