insertItem method
inherited
Insert an item at index
and start an animation that will be passed to
SliverAnimatedGrid.itemBuilder or SliverAnimatedList.itemBuilder when
the item is visible.
This method's semantics are the same as Dart's List.insert method: it
increases the length of the list of items by one and shifts
all items at or after index
towards the end of the list of items.
Implementation
void insertItem(int index, { Duration duration = _kDuration }) {
assert(index >= 0);
final int itemIndex = _indexToItemIndex(index);
assert(itemIndex >= 0 && itemIndex <= _itemsCount);
// Increment the incoming and outgoing item indices to account
// for the insertion.
for (final _ActiveItem item in _incomingItems) {
if (item.itemIndex >= itemIndex) {
item.itemIndex += 1;
}
}
for (final _ActiveItem item in _outgoingItems) {
if (item.itemIndex >= itemIndex) {
item.itemIndex += 1;
}
}
final AnimationController controller = AnimationController(
duration: duration,
vsync: this,
);
final _ActiveItem incomingItem = _ActiveItem.incoming(
controller,
itemIndex,
);
setState(() {
_incomingItems
..add(incomingItem)
..sort();
_itemsCount += 1;
});
controller.forward().then<void>((_) {
_removeActiveItemAt(_incomingItems, incomingItem.itemIndex)!.controller!.dispose();
});
}