expansionSnapshot method

ExpansionSnapshot expansionSnapshot()

Capture a complete expansion snapshot including both fully-expanded nodes and partially-expanded (blocks-mode) nodes with their visible child/edge sets.

Use restoreExpansionSnapshot on a fresh graph to replay this state.

Implementation

ExpansionSnapshot expansionSnapshot() {
  final fullyExpanded = <String>{};
  final partials = <String, ({Set<String> childIds, Set<String> edgeIds})>{};

  void collect(LayoutNode n) {
    if (n.isExpanded) {
      fullyExpanded.add(n.id);
    } else if (n.isPartiallyExpanded) {
      partials[n.id] = (
        childIds: Set<String>.from(n.partialChildIds!),
        edgeIds: Set<String>.from(n.partialHyperedgeIds ?? {}),
      );
    }
    n.children.forEach(collect);
    if (n.hiddenChildren != null) {
      n.hiddenChildren!.forEach(collect);
    }
  }

  collect(root);
  return ExpansionSnapshot(fullyExpanded: fullyExpanded, partials: partials);
}