setRoots method

void setRoots(
  1. List<TreeNode<TKey, TData>> roots
)

Initializes the tree with the given root nodes.

This clears any existing state.

Implementation

void setRoots(List<TreeNode<TKey, TData>> roots) {
  final seen = <TKey>{};
  for (final node in roots) {
    if (!seen.add(node.key)) {
      throw ArgumentError("Duplicate key ${node.key} in setRoots");
    }
  }
  _clear();
  final sorted = comparator != null
      ? (List.of(roots)..sort(comparator))
      : roots;
  for (final node in sorted) {
    _adoptKey(node.key);
    _store.setData(node.key, node);
    _setParentKey(node.key, null);
    _setChildList(node.key, []);
    _setDepthKey(node.key, 0);
    _setExpandedKey(node.key, false);
    _roots.add(node.key);
    _order.addKey(node.key);
  }
  _rebuildVisibleIndex();
  _structureGeneration++;
  // Bulk wholesale replacement: _clear() purged every prior key. Callers
  // frequently reuse the same TKey identities, and any retained mounted
  // Element's builder output may differ. Keep the conservative full
  // refresh rather than try to enumerate every retained key.
  _notifyStructural();
}