@@ -102,16 +102,29 @@ typedef FormBuilderFields
102
102
= Map <String , FormBuilderFieldState <FormBuilderField <dynamic >, dynamic >>;
103
103
104
104
class FormBuilderState extends State <FormBuilder > {
105
- final _formKey = GlobalKey <FormState >();
105
+ final GlobalKey <FormState > _formKey = GlobalKey <FormState >();
106
+ final FormBuilderFields _fields = {};
107
+ final Map <String , dynamic > _instantValue = {};
108
+ final Map <String , dynamic > _savedValue = {};
109
+ // Because dart type system will not accept ValueTransformer<dynamic>
110
+ final Map <String , Function > _transformers = {};
106
111
107
112
bool get enabled => widget.enabled;
108
113
109
- final FormBuilderFields _fields = {};
114
+ /// Verify if all fields on form are valid
115
+ bool get isValid => fields.values.every ((field) => field.isValid);
116
+
117
+ /// Verify if some field on form are dirty
118
+ bool get isDirty => fields.values.any ((field) => field.isDirty);
119
+
120
+ /// Verify if some field on form are touched
121
+ bool get isTouched => fields.values.any ((field) => field.isTouched);
110
122
111
- //because dart type system will not accept ValueTransformer<dynamic>
112
- final _transformers = < String , Function > {};
113
- final _instantValue = < String , dynamic > {};
114
- final _savedValue = < String , dynamic > {};
123
+ /// Get initialValue
124
+ Map <String , dynamic > get initialValue => widget.initialValue;
125
+
126
+ /// Get all fields of form
127
+ FormBuilderFields get fields => _fields;
115
128
116
129
Map <String , dynamic > get instantValue =>
117
130
Map <String , dynamic >.unmodifiable (_instantValue.map ((key, value) =>
@@ -122,11 +135,6 @@ class FormBuilderState extends State<FormBuilder> {
122
135
Map <String , dynamic >.unmodifiable (_savedValue.map ((key, value) =>
123
136
MapEntry (key, _transformers[key]? .call (value) ?? value)));
124
137
125
- /// Returns values after saving
126
- Map <String , dynamic > get initialValue => widget.initialValue;
127
-
128
- FormBuilderFields get fields => _fields;
129
-
130
138
dynamic transformValue <T >(String name, T ? v) {
131
139
final t = _transformers[name];
132
140
return t != null ? t.call (v) : v;
@@ -150,9 +158,6 @@ class FormBuilderState extends State<FormBuilder> {
150
158
widget.onChanged? .call ();
151
159
}
152
160
153
- bool get isValid =>
154
- fields.values.where ((element) => ! element.isValid).isEmpty;
155
-
156
161
void removeInternalFieldValue (
157
162
String name, {
158
163
required bool isSetState,
@@ -282,22 +287,15 @@ class FormBuilderState extends State<FormBuilder> {
282
287
);
283
288
}
284
289
290
+ /// Reset form to `initialValue`
285
291
void reset () {
286
- _formKey.currentState! .reset ();
287
- for (var field in _fields.entries) {
288
- try {
289
- field.value.didChange (getRawValue (field.key));
290
- } catch (e, st) {
291
- log (
292
- 'Error when resetting field: ${field .key }' ,
293
- error: e,
294
- stackTrace: st,
295
- level: 2000 ,
296
- );
297
- }
298
- }
292
+ _formKey.currentState? .reset ();
299
293
}
300
294
295
+ /// Update fields values of form.
296
+ /// Useful when need update all values at once, after init.
297
+ ///
298
+ /// To load all values at once on init, use `initialValue` property
301
299
void patchValue (Map <String , dynamic > val) {
302
300
val.forEach ((key, dynamic value) {
303
301
_fields[key]? .didChange (value);
0 commit comments