IterationList is the standard concrete implementation of IterationBase<E> backed by a mutable Dart List<E>. It behaves like a normal list but honours the windowing offsets inherited from Iteration, allowing you to present only part of the underlying list while still supporting random access and mutation operations.
IterationList({
required Iterable<E> iterable,
int startIndex = 0,
int indexTake = 0,
})
iterable – the initial collection of elements. If iterable is already a List<E>, it is stored directly; otherwise its elements are collected into a new list. The underlying list is stored in _listSource.startIndex, indexTake – window offsets that hide elements at the beginning or end of the list. They are passed to IterationBase.IterationList overrides the abstract hooks of IterationBase to operate directly on _listSource:
| Hook | Implementation |
|---|---|
sourceIterator |
Returns _listSource.iterator, a standard list iterator. |
sourceLength (getter) |
Returns _listSource.length. |
sourceLength (setter) |
Adjusts _listSource.length: extending fills new slots with null (if E?), shrinking truncates the list; setting to zero clears the list. |
sourceLengthBeenModified(amount) |
No‑op because changing _listSource.length directly updates the stored length. |
sourceGet(sourceIndex) |
Returns _listSource.elementAt(sourceIndex). |
set(index, value) |
Writes value to _listSource[offset(index)]. |
sourceInsertAll(index, iterable) |
Inserts elements of iterable into _listSource at the given raw index. |
removeAction({...}) |
Handles removal and replacement: removes elements by index range, by list of indices (removeAll) or by replacing a range with new elements. Returns the number of removed elements and updates _listSource. |
IterationList inherits all list operations from IterationBase. Setting the visible length may adjust indexTake (to hide or reveal elements) and may grow the underlying _listSource. Methods like insert, removeAt, replaceRange, shuffle and sort operate on the visible portion of _listSource and update it in place. Because the underlying storage is a List, these operations have the same complexity characteristics as Dart’s built‑in list operations (e.g. insertion and removal are O(n)).
IterationList is used throughout the package wherever a concrete, mutable list is needed. It serves as the default backing for LargeList extras and for new sequences returned by mapping or slicing operations. When combined with startIndex and indexTake, it allows you to create views of a list without copying it, then modify the underlying list through those views.