insertItem method

void insertItem(
  1. int index, {
  2. Duration duration = _kDuration,
})
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();
  });
}