insertAll 方法
override
在列表中索引位置 index
处插入 iterable
中的所有对象。
这将增加列表长度,并使所有后续对象都向列表末尾移动。
列表必须是可增长的。索引值必须为非负数,且不大于 length。
final numbers = <int>[1, 2, 3, 4];
final insertItems = [10, 11];
numbers.insertAll(2, insertItems);
print(numbers); // [1, 2, 10, 11, 3, 4]
实现
void insertAll(int index, Iterable<E> iterable) {
RangeError.checkValueInInterval(index, 0, length, "index");
if (index == length) {
addAll(iterable);
return;
}
if (iterable is! EfficientLengthIterable || identical(iterable, this)) {
iterable = iterable.toList();
}
int insertionLength = iterable.length;
if (insertionLength == 0) {
return;
}
// There might be errors after the length change, in which case the list
// will end up being modified but the operation not complete. Unless we
// always go through a "toList" we can't really avoid that.
int oldLength = length;
for (int i = oldLength - insertionLength; i < oldLength; ++i) {
add(this[i > 0 ? i : 0]);
}
if (iterable.length != insertionLength) {
// If the iterable's length is linked to this list's length somehow,
// we can't insert one in the other.
this.length -= insertionLength;
throw ConcurrentModificationError(iterable);
}
int oldCopyStart = index + insertionLength;
if (oldCopyStart < oldLength) {
setRange(oldCopyStart, oldLength, this, index);
}
setAll(index, iterable);
}