Skip to content

Commit c67139e

Browse files
committed
when replacing a field, pass down the old value to the new field
1 parent 774567b commit c67139e

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

packages/flutter_form_builder/lib/src/form_builder.dart

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,14 +109,23 @@ class FormBuilderState extends State<FormBuilder> {
109109
// field is being replaced, the new instance is registered before the old
110110
// one is unregistered. To accommodate that use case, but also provide
111111
// assistance to accidental duplicate names, we check and emit a warning.
112+
final oldField = _fields[name];
112113
assert(() {
113-
if (_fields.containsKey(name)) {
114+
if (oldField != null) {
114115
debugPrint('Warning! Replacing duplicate Field for $name'
115116
' -- this is OK to ignore as long as the field was intentionally replaced');
116117
}
117118
return true;
118119
}());
120+
119121
_fields[name] = field;
122+
if (oldField != null) {
123+
// ignore: invalid_use_of_protected_member
124+
field.setValue(oldField.value);
125+
} else {
126+
// ignore: invalid_use_of_protected_member
127+
field.setValue(field.initialValue);
128+
}
120129
}
121130

122131
void unregisterField(String name, FormBuilderFieldState field) {

packages/flutter_form_builder/lib/src/form_builder_field.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,11 +124,10 @@ class FormBuilderFieldState<F extends FormBuilderField<T>, T>
124124
super.initState();
125125
// Register this field when there is a parent FormBuilder
126126
_formBuilderState = FormBuilder.of(context);
127+
// Set the initial value
127128
_formBuilderState?.registerField(widget.name, this);
128129
// Register a touch handler
129130
effectiveFocusNode.addListener(_touchedHandler);
130-
// Set the initial value
131-
setValue(initialValue);
132131
}
133132

134133
@override

0 commit comments

Comments
 (0)