rewriteSceneDocument function

CanvasSceneDocument rewriteSceneDocument(
  1. CanvasSceneDocument doc,
  2. Node rewriteRoot(
    1. Node
    )
)

Rewrite every root subtree in a scene document and preserve identity when no root changed.

Implementation

CanvasSceneDocument rewriteSceneDocument(
  CanvasSceneDocument doc,
  Node Function(Node) rewriteRoot,
) {
  var changedRoot = false;
  final nextRoot = <Node>[];

  for (final c in doc.children) {
    final nc = rewriteRoot(c);
    if (!identical(nc, c)) changedRoot = true;
    nextRoot.add(nc);
  }

  return changedRoot ? doc.copyWith(children: nextRoot) : doc;
}