Skip to content

Commit 7e86a22

Browse files
committed
introduced temp cache for form fields that get removed from memory
1 parent c67139e commit 7e86a22

File tree

3 files changed

+16
-5
lines changed

3 files changed

+16
-5
lines changed

packages/flutter_form_builder/lib/src/fields/form_builder_date_time_picker.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,8 @@ class _FormBuilderDateTimePickerState
260260
super.initState();
261261
_textFieldController = widget.controller ?? TextEditingController();
262262
_dateFormat = widget.format ?? _getDefaultDateTimeFormat();
263-
final initVal = initialValue;
263+
//setting this to value instead of initialValue here is OK since we handle initial value in the parent class
264+
final initVal = value;
264265
_textFieldController.text =
265266
initVal == null ? '' : _dateFormat.format(initVal);
266267
effectiveFocusNode.addListener(_handleFocus);

packages/flutter_form_builder/lib/src/fields/form_builder_text_field.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -437,8 +437,8 @@ class _FormBuilderTextFieldState
437437
@override
438438
void initState() {
439439
super.initState();
440-
_controller =
441-
widget.controller ?? TextEditingController(text: initialValue);
440+
//setting this to value instead of initialValue here is OK since we handle initial value in the parent class
441+
_controller = widget.controller ?? TextEditingController(text: value);
442442
_controller!.addListener(_handleControllerChanged);
443443
}
444444

packages/flutter_form_builder/lib/src/form_builder.dart

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,19 +122,29 @@ class FormBuilderState extends State<FormBuilder> {
122122
if (oldField != null) {
123123
// ignore: invalid_use_of_protected_member
124124
field.setValue(oldField.value);
125+
_tempFieldValues.remove(name);
125126
} else {
126-
// ignore: invalid_use_of_protected_member
127-
field.setValue(field.initialValue);
127+
final oldTemp = _tempFieldValues[name];
128+
if (oldTemp != null) {
129+
// ignore: invalid_use_of_protected_member
130+
field.setValue(oldTemp);
131+
_tempFieldValues.remove(name);
132+
} else {
133+
// ignore: invalid_use_of_protected_member
134+
field.setValue(field.initialValue);
135+
}
128136
}
129137
}
130138

139+
final _tempFieldValues = <String, dynamic>{};
131140
void unregisterField(String name, FormBuilderFieldState field) {
132141
assert(_fields.containsKey(name));
133142
// Only remove the field when it is the one registered. It's possible that
134143
// the field is replaced (registerField is called twice for a given name)
135144
// before unregisterField is called for the name, so just emit a warning
136145
// since it may be intentional.
137146
if (field == _fields[name]) {
147+
_tempFieldValues[name] = field.value;
138148
_fields.remove(name);
139149
} else {
140150
assert(() {

0 commit comments

Comments
 (0)