Jonatas

improve Lists and Maps to add reactivity on all propertys

@@ -30,18 +30,6 @@ class RxList<E> implements List<E>, RxInterface<List<E>> { @@ -30,18 +30,6 @@ class RxList<E> implements List<E>, RxInterface<List<E>> {
30 StreamController<List<E>> subject = StreamController<List<E>>.broadcast(); 30 StreamController<List<E>> subject = StreamController<List<E>>.broadcast();
31 Map<Stream<List<E>>, StreamSubscription> _subscriptions = Map(); 31 Map<Stream<List<E>>, StreamSubscription> _subscriptions = Map();
32 32
33 - /// Adds [item] only if [condition] resolves to true.  
34 - void addIf(condition, E item) {  
35 - if (condition is Condition) condition = condition();  
36 - if (condition is bool && condition) add(item);  
37 - }  
38 -  
39 - /// Adds all [items] only if [condition] resolves to true.  
40 - void addAllIf(condition, Iterable<E> items) {  
41 - if (condition is Condition) condition = condition();  
42 - if (condition is bool && condition) addAll(items);  
43 - }  
44 -  
45 operator []=(int index, E val) { 33 operator []=(int index, E val) {
46 _list[index] = val; 34 _list[index] = val;
47 subject.add(_list); 35 subject.add(_list);
@@ -64,31 +52,47 @@ class RxList<E> implements List<E>, RxInterface<List<E>> { @@ -64,31 +52,47 @@ class RxList<E> implements List<E>, RxInterface<List<E>> {
64 subject.add(_list); 52 subject.add(_list);
65 } 53 }
66 54
  55 + @override
67 void addAll(Iterable<E> item) { 56 void addAll(Iterable<E> item) {
68 _list.addAll(item); 57 _list.addAll(item);
69 subject.add(_list); 58 subject.add(_list);
70 } 59 }
71 60
72 - /// Adds only if [item] is not null. 61 + /// Add [item] to [List<E>] only if [item] is not null.
73 void addNonNull(E item) { 62 void addNonNull(E item) {
74 if (item != null) add(item); 63 if (item != null) add(item);
75 } 64 }
76 65
77 - /// Adds only if [item] is not null. 66 + /// Add [Iterable<E>] to [List<E>] only if [Iterable<E>] is not null.
78 void addAllNonNull(Iterable<E> item) { 67 void addAllNonNull(Iterable<E> item) {
79 if (item != null) addAll(item); 68 if (item != null) addAll(item);
80 } 69 }
81 70
  71 + /// Add [item] to [List<E>] only if [condition] is true.
  72 + void addIf(dynamic condition, E item) {
  73 + if (condition is Condition) condition = condition();
  74 + if (condition is bool && condition) add(item);
  75 + }
  76 +
  77 + /// Adds [Iterable<E>] to [List<E>] only if [condition] is true.
  78 + void addAllIf(dynamic condition, Iterable<E> items) {
  79 + if (condition is Condition) condition = condition();
  80 + if (condition is bool && condition) addAll(items);
  81 + }
  82 +
  83 + @override
82 void insert(int index, E item) { 84 void insert(int index, E item) {
83 _list.insert(index, item); 85 _list.insert(index, item);
84 subject.add(_list); 86 subject.add(_list);
85 } 87 }
86 88
  89 + @override
87 void insertAll(int index, Iterable<E> iterable) { 90 void insertAll(int index, Iterable<E> iterable) {
88 _list.insertAll(index, iterable); 91 _list.insertAll(index, iterable);
89 subject.add(_list); 92 subject.add(_list);
90 } 93 }
91 94
  95 + @override
92 int get length => value.length; 96 int get length => value.length;
93 97
94 /// Removes an item from the list. 98 /// Removes an item from the list.
@@ -96,6 +100,7 @@ class RxList<E> implements List<E>, RxInterface<List<E>> { @@ -96,6 +100,7 @@ class RxList<E> implements List<E>, RxInterface<List<E>> {
96 /// This is O(N) in the number of items in the list. 100 /// This is O(N) in the number of items in the list.
97 /// 101 ///
98 /// Returns whether the item was present in the list. 102 /// Returns whether the item was present in the list.
  103 + @override
99 bool remove(Object item) { 104 bool remove(Object item) {
100 bool hasRemoved = _list.remove(item); 105 bool hasRemoved = _list.remove(item);
101 if (hasRemoved) { 106 if (hasRemoved) {
@@ -104,38 +109,45 @@ class RxList<E> implements List<E>, RxInterface<List<E>> { @@ -104,38 +109,45 @@ class RxList<E> implements List<E>, RxInterface<List<E>> {
104 return hasRemoved; 109 return hasRemoved;
105 } 110 }
106 111
  112 + @override
107 E removeAt(int index) { 113 E removeAt(int index) {
108 E item = _list.removeAt(index); 114 E item = _list.removeAt(index);
109 subject.add(_list); 115 subject.add(_list);
110 return item; 116 return item;
111 } 117 }
112 118
  119 + @override
113 E removeLast() { 120 E removeLast() {
114 E item = _list.removeLast(); 121 E item = _list.removeLast();
115 subject.add(_list); 122 subject.add(_list);
116 return item; 123 return item;
117 } 124 }
118 125
  126 + @override
119 void removeRange(int start, int end) { 127 void removeRange(int start, int end) {
120 _list.removeRange(start, end); 128 _list.removeRange(start, end);
121 subject.add(_list); 129 subject.add(_list);
122 } 130 }
123 131
  132 + @override
124 void removeWhere(bool Function(E) test) { 133 void removeWhere(bool Function(E) test) {
125 _list.removeWhere(test); 134 _list.removeWhere(test);
126 subject.add(_list); 135 subject.add(_list);
127 } 136 }
128 137
  138 + @override
129 void clear() { 139 void clear() {
130 _list.clear(); 140 _list.clear();
131 subject.add(_list); 141 subject.add(_list);
132 } 142 }
133 143
  144 + @override
134 void sort([int compare(E a, E b)]) { 145 void sort([int compare(E a, E b)]) {
135 _list.sort(); 146 _list.sort();
136 subject.add(_list); 147 subject.add(_list);
137 } 148 }
138 149
  150 + @override
139 close() { 151 close() {
140 _subscriptions.forEach((observable, subscription) { 152 _subscriptions.forEach((observable, subscription) {
141 subscription.cancel(); 153 subscription.cancel();
@@ -169,6 +181,7 @@ class RxList<E> implements List<E>, RxInterface<List<E>> { @@ -169,6 +181,7 @@ class RxList<E> implements List<E>, RxInterface<List<E>> {
169 return _list; 181 return _list;
170 } 182 }
171 183
  184 +
172 String get string => value.toString(); 185 String get string => value.toString();
173 186
174 addListener(Stream<List<E>> rxGetx) { 187 addListener(Stream<List<E>> rxGetx) {
@@ -196,210 +209,219 @@ class RxList<E> implements List<E>, RxInterface<List<E>> { @@ -196,210 +209,219 @@ class RxList<E> implements List<E>, RxInterface<List<E>> {
196 stream.listen((va) => value = va); 209 stream.listen((va) => value = va);
197 210
198 @override 211 @override
199 - E get first => _list.first; 212 + E get first => value.first;
200 213
201 @override 214 @override
202 - E get last => _list.last; 215 + E get last => value.last;
203 216
204 @override 217 @override
205 bool any(bool Function(E) test) { 218 bool any(bool Function(E) test) {
206 - return _list.any(test); 219 + return value.any(test);
207 } 220 }
208 221
209 @override 222 @override
210 Map<int, E> asMap() { 223 Map<int, E> asMap() {
211 - return _list.asMap(); 224 + return value.asMap();
212 } 225 }
213 226
214 @override 227 @override
215 List<R> cast<R>() { 228 List<R> cast<R>() {
216 - return _list.cast<R>(); 229 + return value.cast<R>();
217 } 230 }
218 231
219 @override 232 @override
220 bool contains(Object element) { 233 bool contains(Object element) {
221 - return _list.contains(element); 234 + return value.contains(element);
222 } 235 }
223 236
224 @override 237 @override
225 E elementAt(int index) { 238 E elementAt(int index) {
226 - return _list.elementAt(index); 239 + return value.elementAt(index);
227 } 240 }
228 241
229 @override 242 @override
230 bool every(bool Function(E) test) { 243 bool every(bool Function(E) test) {
231 - return _list.every(test); 244 + return value.every(test);
232 } 245 }
233 246
234 @override 247 @override
235 Iterable<T> expand<T>(Iterable<T> Function(E) f) { 248 Iterable<T> expand<T>(Iterable<T> Function(E) f) {
236 - return _list.expand(f); 249 + return value.expand(f);
237 } 250 }
238 251
239 @override 252 @override
240 void fillRange(int start, int end, [E fillValue]) { 253 void fillRange(int start, int end, [E fillValue]) {
241 _list.fillRange(start, end, fillValue); 254 _list.fillRange(start, end, fillValue);
  255 + subject.add(_list);
242 } 256 }
243 257
244 @override 258 @override
245 E firstWhere(bool Function(E) test, {E Function() orElse}) { 259 E firstWhere(bool Function(E) test, {E Function() orElse}) {
246 - return _list.firstWhere(test, orElse: orElse); 260 + return value.firstWhere(test, orElse: orElse);
247 } 261 }
248 262
249 @override 263 @override
250 T fold<T>(T initialValue, T Function(T, E) combine) { 264 T fold<T>(T initialValue, T Function(T, E) combine) {
251 - return _list.fold(initialValue, combine); 265 + return value.fold(initialValue, combine);
252 } 266 }
253 267
254 @override 268 @override
255 Iterable<E> followedBy(Iterable<E> other) { 269 Iterable<E> followedBy(Iterable<E> other) {
256 - return _list.followedBy(other); 270 + return value.followedBy(other);
257 } 271 }
258 272
259 @override 273 @override
260 void forEach(void Function(E) f) { 274 void forEach(void Function(E) f) {
261 - _list.forEach(f); 275 + value.forEach(f);
262 } 276 }
263 277
264 @override 278 @override
265 Iterable<E> getRange(int start, int end) { 279 Iterable<E> getRange(int start, int end) {
266 - return _list.getRange(start, end); 280 + return value.getRange(start, end);
267 } 281 }
268 282
269 @override 283 @override
270 int indexOf(E element, [int start = 0]) { 284 int indexOf(E element, [int start = 0]) {
271 - return _list.indexOf(element, start); 285 + return value.indexOf(element, start);
272 } 286 }
273 287
274 @override 288 @override
275 int indexWhere(bool Function(E) test, [int start = 0]) { 289 int indexWhere(bool Function(E) test, [int start = 0]) {
276 - return _list.indexWhere(test, start); 290 + return value.indexWhere(test, start);
277 } 291 }
278 292
279 @override 293 @override
280 String join([String separator = ""]) { 294 String join([String separator = ""]) {
281 - return _list.join(separator); 295 + return value.join(separator);
282 } 296 }
283 297
284 @override 298 @override
285 int lastIndexOf(E element, [int start]) { 299 int lastIndexOf(E element, [int start]) {
286 - return _list.lastIndexOf(element, start); 300 + return value.lastIndexOf(element, start);
287 } 301 }
288 302
289 @override 303 @override
290 int lastIndexWhere(bool Function(E) test, [int start]) { 304 int lastIndexWhere(bool Function(E) test, [int start]) {
291 - return _list.lastIndexWhere(test, start); 305 + return value.lastIndexWhere(test, start);
292 } 306 }
293 307
294 @override 308 @override
295 E lastWhere(bool Function(E) test, {E Function() orElse}) { 309 E lastWhere(bool Function(E) test, {E Function() orElse}) {
296 - return _list.lastWhere(test, orElse: orElse); 310 + return value.lastWhere(test, orElse: orElse);
297 } 311 }
298 312
299 @override 313 @override
300 set length(int newLength) { 314 set length(int newLength) {
301 _list.length = newLength; 315 _list.length = newLength;
  316 + subject.add(_list);
302 } 317 }
303 318
304 @override 319 @override
305 Iterable<T> map<T>(T Function(E) f) { 320 Iterable<T> map<T>(T Function(E) f) {
306 - return _list.map(f); 321 + return value.map(f);
307 } 322 }
308 323
309 @override 324 @override
310 E reduce(E Function(E, E) combine) { 325 E reduce(E Function(E, E) combine) {
311 - return _list.reduce(combine); 326 + return value.reduce(combine);
312 } 327 }
313 328
314 @override 329 @override
315 void replaceRange(int start, int end, Iterable<E> replacement) { 330 void replaceRange(int start, int end, Iterable<E> replacement) {
316 _list.replaceRange(start, end, replacement); 331 _list.replaceRange(start, end, replacement);
  332 + subject.add(_list);
317 } 333 }
318 334
319 @override 335 @override
320 void retainWhere(bool Function(E) test) { 336 void retainWhere(bool Function(E) test) {
321 _list.retainWhere(test); 337 _list.retainWhere(test);
  338 + subject.add(_list);
322 } 339 }
323 340
324 @override 341 @override
325 - Iterable<E> get reversed => _list.reversed; 342 + Iterable<E> get reversed => value.reversed;
326 343
327 @override 344 @override
328 void setAll(int index, Iterable<E> iterable) { 345 void setAll(int index, Iterable<E> iterable) {
329 _list.setAll(index, iterable); 346 _list.setAll(index, iterable);
  347 + subject.add(_list);
330 } 348 }
331 349
332 @override 350 @override
333 void setRange(int start, int end, Iterable<E> iterable, [int skipCount = 0]) { 351 void setRange(int start, int end, Iterable<E> iterable, [int skipCount = 0]) {
334 _list.setRange(start, end, iterable, skipCount); 352 _list.setRange(start, end, iterable, skipCount);
  353 + subject.add(_list);
335 } 354 }
336 355
337 @override 356 @override
338 void shuffle([Random random]) { 357 void shuffle([Random random]) {
339 _list.shuffle(random); 358 _list.shuffle(random);
  359 + subject.add(_list);
340 } 360 }
341 361
342 @override 362 @override
343 - E get single => _list.single; 363 + E get single => value.single;
344 364
345 @override 365 @override
346 E singleWhere(bool Function(E) test, {E Function() orElse}) { 366 E singleWhere(bool Function(E) test, {E Function() orElse}) {
347 - return _list.singleWhere(test, orElse: orElse); 367 + return value.singleWhere(test, orElse: orElse);
348 } 368 }
349 369
350 @override 370 @override
351 Iterable<E> skip(int count) { 371 Iterable<E> skip(int count) {
352 - return _list.skip(count); 372 + return value.skip(count);
353 } 373 }
354 374
355 @override 375 @override
356 Iterable<E> skipWhile(bool Function(E) test) { 376 Iterable<E> skipWhile(bool Function(E) test) {
357 - return _list.skipWhile(test); 377 + return value.skipWhile(test);
358 } 378 }
359 379
360 @override 380 @override
361 List<E> sublist(int start, [int end]) { 381 List<E> sublist(int start, [int end]) {
362 - return _list.sublist(start, end); 382 + return value.sublist(start, end);
363 } 383 }
364 384
365 @override 385 @override
366 Iterable<E> take(int count) { 386 Iterable<E> take(int count) {
367 - return _list.take(count); 387 + return value.take(count);
368 } 388 }
369 389
370 @override 390 @override
371 Iterable<E> takeWhile(bool Function(E) test) { 391 Iterable<E> takeWhile(bool Function(E) test) {
372 - return _list.takeWhile(test); 392 + return value.takeWhile(test);
373 } 393 }
374 394
375 @override 395 @override
376 List<E> toList({bool growable = true}) { 396 List<E> toList({bool growable = true}) {
377 - return _list.toList(growable: growable); 397 + return value.toList(growable: growable);
378 } 398 }
379 399
380 @override 400 @override
381 Set<E> toSet() { 401 Set<E> toSet() {
382 - return _list.toSet(); 402 + return value.toSet();
383 } 403 }
384 404
385 @override 405 @override
386 Iterable<E> where(bool Function(E) test) { 406 Iterable<E> where(bool Function(E) test) {
387 - return _list.where(test); 407 + return value.where(test);
388 } 408 }
389 409
390 @override 410 @override
391 Iterable<T> whereType<T>() { 411 Iterable<T> whereType<T>() {
392 - return _list.whereType<T>(); 412 + return value.whereType<T>();
393 } 413 }
394 414
395 @override 415 @override
396 set first(E value) { 416 set first(E value) {
397 _list.first = value; 417 _list.first = value;
  418 + subject.add(_list);
398 } 419 }
399 420
400 @override 421 @override
401 set last(E value) { 422 set last(E value) {
402 _list.last = value; 423 _list.last = value;
  424 + subject.add(_list);
403 } 425 }
404 } 426 }
405 427
@@ -4,7 +4,7 @@ import '../../../../get.dart'; @@ -4,7 +4,7 @@ import '../../../../get.dart';
4 import '../rx_core/rx_interface.dart'; 4 import '../rx_core/rx_interface.dart';
5 import '../rx_typedefs/rx_typedefs.dart'; 5 import '../rx_typedefs/rx_typedefs.dart';
6 6
7 -class RxMap<K, V> extends RxInterface<Map<K, V>> implements Map<K, V> { 7 +class RxMap<K, V> implements RxInterface<Map<K, V>>, Map<K, V> {
8 RxMap([Map<K, V> initial]) { 8 RxMap([Map<K, V> initial]) {
9 _value = initial; 9 _value = initial;
10 } 10 }
@@ -111,20 +111,20 @@ class RxMap<K, V> extends RxInterface<Map<K, V>> implements Map<K, V> { @@ -111,20 +111,20 @@ class RxMap<K, V> extends RxInterface<Map<K, V>> implements Map<K, V> {
111 } 111 }
112 112
113 @override 113 @override
114 - Map<K2, V2> cast<K2, V2>() => _value.cast<K2, V2>(); 114 + Map<K2, V2> cast<K2, V2>() => value.cast<K2, V2>();
115 115
116 @override 116 @override
117 - bool containsKey(Object key) => _value.containsKey(key); 117 + bool containsKey(Object key) => value.containsKey(key);
118 118
119 @override 119 @override
120 bool containsValue(Object value) => _value.containsValue(value); 120 bool containsValue(Object value) => _value.containsValue(value);
121 121
122 @override 122 @override
123 - Iterable<MapEntry<K, V>> get entries => _value.entries; 123 + Iterable<MapEntry<K, V>> get entries => value.entries;
124 124
125 @override 125 @override
126 void forEach(void Function(K, V) f) { 126 void forEach(void Function(K, V) f) {
127 - _value.forEach(f); 127 + value.forEach(f);
128 } 128 }
129 129
130 @override 130 @override
@@ -134,7 +134,7 @@ class RxMap<K, V> extends RxInterface<Map<K, V>> implements Map<K, V> { @@ -134,7 +134,7 @@ class RxMap<K, V> extends RxInterface<Map<K, V>> implements Map<K, V> {
134 bool get isNotEmpty => value.isNotEmpty; 134 bool get isNotEmpty => value.isNotEmpty;
135 135
136 @override 136 @override
137 - Iterable<K> get keys => _value.keys; 137 + Iterable<K> get keys => value.keys;
138 138
139 @override 139 @override
140 int get length => value.length; 140 int get length => value.length;
@@ -193,167 +193,170 @@ class RxSet<E> implements Set<E>, RxInterface<Set<E>> { @@ -193,167 +193,170 @@ class RxSet<E> implements Set<E>, RxInterface<Set<E>> {
193 stream.listen((va) => value = va); 193 stream.listen((va) => value = va);
194 194
195 @override 195 @override
196 - E get first => _list.first; 196 + E get first => value.first;
197 197
198 @override 198 @override
199 - E get last => _list.last; 199 + E get last => value.last;
200 200
201 @override 201 @override
202 bool any(bool Function(E) test) { 202 bool any(bool Function(E) test) {
203 - return _list.any(test); 203 + return value.any(test);
204 } 204 }
205 205
206 @override 206 @override
207 Set<R> cast<R>() { 207 Set<R> cast<R>() {
208 - return _list.cast<R>(); 208 + return value.cast<R>();
209 } 209 }
210 210
211 @override 211 @override
212 bool contains(Object element) { 212 bool contains(Object element) {
213 - return _list.contains(element); 213 + return value.contains(element);
214 } 214 }
215 215
216 @override 216 @override
217 E elementAt(int index) { 217 E elementAt(int index) {
218 - return _list.elementAt(index); 218 + return value.elementAt(index);
219 } 219 }
220 220
221 @override 221 @override
222 bool every(bool Function(E) test) { 222 bool every(bool Function(E) test) {
223 - return _list.every(test); 223 + return value.every(test);
224 } 224 }
225 225
226 @override 226 @override
227 Iterable<T> expand<T>(Iterable<T> Function(E) f) { 227 Iterable<T> expand<T>(Iterable<T> Function(E) f) {
228 - return _list.expand(f); 228 + return value.expand(f);
229 } 229 }
230 230
231 @override 231 @override
232 E firstWhere(bool Function(E) test, {E Function() orElse}) { 232 E firstWhere(bool Function(E) test, {E Function() orElse}) {
233 - return _list.firstWhere(test, orElse: orElse); 233 + return value.firstWhere(test, orElse: orElse);
234 } 234 }
235 235
236 @override 236 @override
237 T fold<T>(T initialValue, T Function(T, E) combine) { 237 T fold<T>(T initialValue, T Function(T, E) combine) {
238 - return _list.fold(initialValue, combine); 238 + return value.fold(initialValue, combine);
239 } 239 }
240 240
241 @override 241 @override
242 Iterable<E> followedBy(Iterable<E> other) { 242 Iterable<E> followedBy(Iterable<E> other) {
243 - return _list.followedBy(other); 243 + return value.followedBy(other);
244 } 244 }
245 245
246 @override 246 @override
247 void forEach(void Function(E) f) { 247 void forEach(void Function(E) f) {
248 - _list.forEach(f); 248 + value.forEach(f);
249 } 249 }
250 250
251 @override 251 @override
252 String join([String separator = ""]) { 252 String join([String separator = ""]) {
253 - return _list.join(separator); 253 + return value.join(separator);
254 } 254 }
255 255
256 @override 256 @override
257 E lastWhere(bool Function(E) test, {E Function() orElse}) { 257 E lastWhere(bool Function(E) test, {E Function() orElse}) {
258 - return _list.lastWhere(test, orElse: orElse); 258 + return value.lastWhere(test, orElse: orElse);
259 } 259 }
260 260
261 @override 261 @override
262 Iterable<T> map<T>(T Function(E) f) { 262 Iterable<T> map<T>(T Function(E) f) {
263 - return _list.map(f); 263 + return value.map(f);
264 } 264 }
265 265
266 @override 266 @override
267 E reduce(E Function(E, E) combine) { 267 E reduce(E Function(E, E) combine) {
268 - return _list.reduce(combine); 268 + return value.reduce(combine);
269 } 269 }
270 270
271 @override 271 @override
272 - E get single => _list.single; 272 + E get single => value.single;
273 273
274 @override 274 @override
275 E singleWhere(bool Function(E) test, {E Function() orElse}) { 275 E singleWhere(bool Function(E) test, {E Function() orElse}) {
276 - return _list.singleWhere(test, orElse: orElse); 276 + return value.singleWhere(test, orElse: orElse);
277 } 277 }
278 278
279 @override 279 @override
280 Iterable<E> skip(int count) { 280 Iterable<E> skip(int count) {
281 - return _list.skip(count); 281 + return value.skip(count);
282 } 282 }
283 283
284 @override 284 @override
285 Iterable<E> skipWhile(bool Function(E) test) { 285 Iterable<E> skipWhile(bool Function(E) test) {
286 - return _list.skipWhile(test); 286 + return value.skipWhile(test);
287 } 287 }
288 288
289 @override 289 @override
290 Iterable<E> take(int count) { 290 Iterable<E> take(int count) {
291 - return _list.take(count); 291 + return value.take(count);
292 } 292 }
293 293
294 @override 294 @override
295 Iterable<E> takeWhile(bool Function(E) test) { 295 Iterable<E> takeWhile(bool Function(E) test) {
296 - return _list.takeWhile(test); 296 + return value.takeWhile(test);
297 } 297 }
298 298
299 @override 299 @override
300 List<E> toList({bool growable = true}) { 300 List<E> toList({bool growable = true}) {
301 - return _list.toList(growable: growable); 301 + return value.toList(growable: growable);
302 } 302 }
303 303
304 @override 304 @override
305 Set<E> toSet() { 305 Set<E> toSet() {
306 - return _list.toSet(); 306 + return value.toSet();
307 } 307 }
308 308
309 @override 309 @override
310 Iterable<E> where(bool Function(E) test) { 310 Iterable<E> where(bool Function(E) test) {
311 - return _list.where(test); 311 + return value.where(test);
312 } 312 }
313 313
314 @override 314 @override
315 Iterable<T> whereType<T>() { 315 Iterable<T> whereType<T>() {
316 - return _list.whereType<T>(); 316 + return value.whereType<T>();
317 } 317 }
318 318
319 @override 319 @override
320 bool containsAll(Iterable<Object> other) { 320 bool containsAll(Iterable<Object> other) {
321 - return _list.containsAll(other); 321 + return value.containsAll(other);
322 } 322 }
323 323
324 @override 324 @override
325 Set<E> difference(Set<Object> other) { 325 Set<E> difference(Set<Object> other) {
326 - return _list.difference(other); 326 + return value.difference(other);
327 } 327 }
328 328
329 @override 329 @override
330 Set<E> intersection(Set<Object> other) { 330 Set<E> intersection(Set<Object> other) {
331 - return _list.intersection(other); 331 + return value.intersection(other);
332 } 332 }
333 333
334 @override 334 @override
335 E lookup(Object object) { 335 E lookup(Object object) {
336 - return _list.lookup(object); 336 + return value.lookup(object);
337 } 337 }
338 338
339 @override 339 @override
340 void removeAll(Iterable<Object> elements) { 340 void removeAll(Iterable<Object> elements) {
341 _list.removeAll(elements); 341 _list.removeAll(elements);
  342 + subject.add(_list);
342 } 343 }
343 344
344 @override 345 @override
345 void retainAll(Iterable<Object> elements) { 346 void retainAll(Iterable<Object> elements) {
346 _list.retainAll(elements); 347 _list.retainAll(elements);
  348 + subject.add(_list);
347 } 349 }
348 350
349 @override 351 @override
350 void retainWhere(bool Function(E) E) { 352 void retainWhere(bool Function(E) E) {
351 _list.retainWhere(E); 353 _list.retainWhere(E);
  354 + subject.add(_list);
352 } 355 }
353 356
354 @override 357 @override
355 Set<E> union(Set<E> other) { 358 Set<E> union(Set<E> other) {
356 - return _list.union(other); 359 + return value.union(other);
357 } 360 }
358 } 361 }
359 362