replaceRange method

  1. @override
void replaceRange(
  1. int start,
  2. int end,
  3. Iterable<T> newContents
)
override

Replaces a range of elements with the elements of replacements.

Removes the objects in the range from start to end, then inserts the elements of replacements at start.

var list = [1, 2, 3, 4, 5];
list.replaceRange(1, 4, [6, 7]);
list.join(', '); // '1, 6, 7, 5'

The provided range, given by start and end, must be valid. A range from start to end is valid if 0 ≤ startendlength. An empty range (with end == start) is valid.

The operation list.replaceRange(start, end, replacements) is roughly equivalent to:

list.removeRange(start, end);
list.insertAll(start, replacements);

but may be more efficient.

The list must be growable. This method does not work on fixed-length lists, even when replacements has the same number of elements as the replaced range. In that case use setRange instead.

Implementation

@override
void replaceRange(int start, int end, Iterable<T> newContents) {
  if (lock) return super.replaceRange(start, end, newContents);
  if (start < end) {
    lock = true;
    added = const {};
    removed = const {};
    changed = {};
    for (int index = start.toInt(); index < end; index++)
      changed[index] = super[index];
    super.replaceRange(start, end, newContents);
    notifyListeners();
  }
}