insertOrAppend method

Iterable<T> insertOrAppend(
  1. int index,
  2. T value
)

Inserts an element into the iterable at the specified index.

Takes the specified element and inserts it into the iterable at the position index.

If index is less than zero, an ArgumentError is thrown.

If iteration of the underlying iterable is exausted before the position index is reached, value is added to the end iterable as if calling append.

Implementation

Iterable<T> insertOrAppend(int index, T value) sync* {
  if (index == 0) {
    yield* prepend(value);
    return;
  }
  if (index < 0) {
    throw ArgumentError('Parameter "index" must be greater than zero.');
  }

  final iterator = this.iterator;
  var i = 0;

  while (iterator.moveNext()) {
    if (i == index) {
      yield value;
    }
    yield iterator.current;
    i++;
  }

  if (index >= i) {
    yield value;
  }
}