@@ -59,7 +59,7 @@ typedef ChangesetListener = void Function(GridFieldChangeset);
5959class GridFieldCache {
6060 final String gridId;
6161 late final GridFieldsListener _fieldListener;
62- final FieldsNotifier _fieldNotifier = FieldsNotifier ();
62+ FieldsNotifier ? _fieldNotifier = FieldsNotifier ();
6363 final List <ChangesetListener > _changesetListener = [];
6464
6565 GridFieldCache ({required this .gridId}) {
@@ -81,15 +81,16 @@ class GridFieldCache {
8181
8282 Future <void > dispose () async {
8383 await _fieldListener.stop ();
84- _fieldNotifier.dispose ();
84+ _fieldNotifier? .dispose ();
85+ _fieldNotifier = null ;
8586 }
8687
87- UnmodifiableListView <Field > get unmodifiableFields => UnmodifiableListView (_fieldNotifier.fields);
88+ UnmodifiableListView <Field > get unmodifiableFields => UnmodifiableListView (_fieldNotifier? .fields ?? [] );
8889
89- List <Field > get clonedFields => [..._fieldNotifier.fields];
90+ List <Field > get fields => [..._fieldNotifier? .fields ?? [] ];
9091
9192 set fields (List <Field > fields) {
92- _fieldNotifier.fields = [...fields];
93+ _fieldNotifier? .fields = [...fields];
9394 }
9495
9596 VoidCallback addListener (
@@ -100,20 +101,20 @@ class GridFieldCache {
100101 }
101102
102103 if (onChanged != null ) {
103- onChanged (clonedFields );
104+ onChanged (fields );
104105 }
105106
106107 if (listener != null ) {
107108 listener ();
108109 }
109110 }
110111
111- _fieldNotifier.addListener (f);
112+ _fieldNotifier? .addListener (f);
112113 return f;
113114 }
114115
115116 void removeListener (VoidCallback f) {
116- _fieldNotifier.removeListener (f);
117+ _fieldNotifier? .removeListener (f);
117118 }
118119
119120 void addChangesetListener (ChangesetListener listener) {
@@ -131,43 +132,43 @@ class GridFieldCache {
131132 if (deletedFields.isEmpty) {
132133 return ;
133134 }
134- final List <Field > fields = _fieldNotifier. fields;
135+ final List <Field > newFields = fields;
135136 final Map <String , FieldOrder > deletedFieldMap = {
136137 for (var fieldOrder in deletedFields) fieldOrder.fieldId: fieldOrder
137138 };
138139
139- fields .retainWhere ((field) => (deletedFieldMap[field.id] == null ));
140- _fieldNotifier.fields = fields ;
140+ newFields .retainWhere ((field) => (deletedFieldMap[field.id] == null ));
141+ _fieldNotifier? .fields = newFields ;
141142 }
142143
143144 void _insertFields (List <IndexField > insertedFields) {
144145 if (insertedFields.isEmpty) {
145146 return ;
146147 }
147- final List <Field > fields = _fieldNotifier. fields;
148+ final List <Field > newFields = fields;
148149 for (final indexField in insertedFields) {
149- if (fields .length > indexField.index) {
150- fields .insert (indexField.index, indexField.field_1);
150+ if (newFields .length > indexField.index) {
151+ newFields .insert (indexField.index, indexField.field_1);
151152 } else {
152- fields .add (indexField.field_1);
153+ newFields .add (indexField.field_1);
153154 }
154155 }
155- _fieldNotifier.fields = fields ;
156+ _fieldNotifier? .fields = newFields ;
156157 }
157158
158159 void _updateFields (List <Field > updatedFields) {
159160 if (updatedFields.isEmpty) {
160161 return ;
161162 }
162- final List <Field > fields = _fieldNotifier. fields;
163+ final List <Field > newFields = fields;
163164 for (final updatedField in updatedFields) {
164- final index = fields .indexWhere ((field) => field.id == updatedField.id);
165+ final index = newFields .indexWhere ((field) => field.id == updatedField.id);
165166 if (index != - 1 ) {
166- fields .removeAt (index);
167- fields .insert (index, updatedField);
167+ newFields .removeAt (index);
168+ newFields .insert (index, updatedField);
168169 }
169170 }
170- _fieldNotifier.fields = fields ;
171+ _fieldNotifier? .fields = newFields ;
171172 }
172173}
173174
0 commit comments