updateItems method
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);
}
}