@@ -872,10 +872,10 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
872
872
int _length;
873
873
874
874
/// Keeps track of moved items.
875
- DuplicateMap _movedItems = new DuplicateMap () ;
875
+ DuplicateMap _movedItems;
876
876
877
877
/// Keeps track of removed items.
878
- DuplicateMap _removedItems = new DuplicateMap () ;
878
+ DuplicateMap _removedItems;
879
879
880
880
ItemRecord <V > _previousItHead;
881
881
ItemRecord <V > _itHead, _itTail;
@@ -886,7 +886,7 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
886
886
void _revertToPreviousState () {
887
887
if (! isDirty) return ;
888
888
889
- _movedItems.clear ();
889
+ if (_movedItems != null ) _movedItems.clear ();
890
890
ItemRecord <V > prev;
891
891
int i = 0 ;
892
892
@@ -896,6 +896,8 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
896
896
record.currentIndex = record.previousIndex = i;
897
897
record._prev = prev;
898
898
if (prev != null ) prev._next = prev._nextPrevious = record;
899
+
900
+ if (_movedItems == null ) _movedItems = new DuplicateMap ();
899
901
_movedItems.put (record);
900
902
}
901
903
@@ -1060,13 +1062,13 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
1060
1062
}
1061
1063
1062
1064
// Attempt to see if we have seen the item before.
1063
- record = _movedItems.get (item, index);
1065
+ record = _movedItems == null ? null : _movedItems .get (item, index);
1064
1066
if (record != null ) {
1065
1067
// We have seen this before, we need to move it forward in the collection.
1066
1068
_moveAfter (record, previousRecord, index);
1067
1069
} else {
1068
1070
// Never seen it, check evicted list.
1069
- record = _removedItems.get (item);
1071
+ record = _removedItems == null ? null : _removedItems .get (item);
1070
1072
if (record != null ) {
1071
1073
// It is an item which we have evicted earlier: reinsert it back into the list.
1072
1074
_reinsertAfter (record, previousRecord, index);
@@ -1105,7 +1107,7 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
1105
1107
* of 'b' rather then switch 'a' with 'b' and then add 'a' at the end.
1106
1108
*/
1107
1109
ItemRecord <V > verifyReinsertion (ItemRecord record, item, int index) {
1108
- ItemRecord <V > reinsertRecord = _removedItems.get (item);
1110
+ ItemRecord <V > reinsertRecord = _removedItems == null ? null : _removedItems .get (item);
1109
1111
if (reinsertRecord != null ) {
1110
1112
record = _reinsertAfter (reinsertRecord, record._prev, index);
1111
1113
} else if (record.currentIndex != index) {
@@ -1127,7 +1129,7 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
1127
1129
_addToRemovals (_unlink (record));
1128
1130
record = nextRecord;
1129
1131
}
1130
- _removedItems.clear ();
1132
+ if (_removedItems != null ) _removedItems.clear ();
1131
1133
1132
1134
if (_additionsTail != null ) _additionsTail._nextAdded = null ;
1133
1135
if (_movesTail != null ) _movesTail._nextMoved = null ;
@@ -1136,7 +1138,7 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
1136
1138
}
1137
1139
1138
1140
ItemRecord <V > _reinsertAfter (ItemRecord <V > record, ItemRecord <V > prevRecord, int index) {
1139
- _removedItems.remove (record);
1141
+ if (_removedItems != null ) _removedItems.remove (record);
1140
1142
var prev = record._prevRemoved;
1141
1143
var next = record._nextRemoved;
1142
1144
@@ -1198,6 +1200,8 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
1198
1200
prevRecord._next = record;
1199
1201
}
1200
1202
1203
+ if (_movedItems == null ) _movedItems = new DuplicateMap ();
1204
+
1201
1205
_movedItems.put (record);
1202
1206
record.currentIndex = index;
1203
1207
return record;
@@ -1206,7 +1210,7 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
1206
1210
ItemRecord <V > _remove (ItemRecord record) => _addToRemovals (_unlink (record));
1207
1211
1208
1212
ItemRecord <V > _unlink (ItemRecord record) {
1209
- _movedItems.remove (record);
1213
+ if (_movedItems != null ) _movedItems.remove (record);
1210
1214
1211
1215
var prev = record._prev;
1212
1216
var next = record._next;
@@ -1245,6 +1249,7 @@ class _CollectionChangeRecord<V> implements CollectionChangeRecord<V> {
1245
1249
}
1246
1250
1247
1251
ItemRecord <V > _addToRemovals (ItemRecord <V > record) {
1252
+ if (_removedItems == null ) _removedItems = new DuplicateMap ();
1248
1253
_removedItems.put (record);
1249
1254
record.currentIndex = null ;
1250
1255
record._nextRemoved = null ;
0 commit comments