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