updateItems method

void updateItems(
  1. List<T> items, {
  2. bool append = false,
})

Updates the entire list of items.

Preserves selection and expansion state where possible. For server-side lists, updates totalItems in state without triggering pagination.

Implementation

void updateItems(List<T> items, {bool append = false}) {
  if (!append) {
    if (_useLocalPaginationItems) {
      _localPaginationItems.clear();
    }
    // Preserve items that are currently selected, expanded, viewed (expandedDetailKey) or edited (editingItemKey)
    // so that state (selection/expansion/details) doesn't get orphaned after a refresh.
    final Set<K> preservedKeys = <K>{
      ...selectedKeys,
      ...expandedKeys,
      if (value.expandedDetailKey != null) value.expandedDetailKey as K,
      if (value.editingItemKey != null) value.editingItemKey as K,
    };
    final preservedItems = <K, TListItem<T, K>>{};
    for (final k in preservedKeys) {
      final v = _itemsMap[k];
      if (v != null) preservedItems[k] = v;
    }

    _itemsMap
      ..clear()
      ..addAll(preservedItems);
  }

  for (final item in items) {
    _registerRecursive(item);
  }

  if (!isServerSide) {
    _executePaginationAction('updateItems', page: 1);
  } else if (!append) {
    // Server-side: reflect updated item count in state without re-fetching.
    updateState(who: 'updateItems_serverSide', totalItems: _itemsMap.length);
  }
}