observeIdentifier method

Future<PatchbaySemanticsIdentifierObservation?> observeIdentifier(
  1. String identifier
)

Resolves a stable Semantics identifier without using labels or paths.

Implementation

Future<PatchbaySemanticsIdentifierObservation?> observeIdentifier(
  String identifier,
) async {
  final SemanticsOwner? owner = await ensureOwner();
  final SemanticsNode? root = owner?.rootSemanticsNode;
  if (root == null) return null;
  final List<PatchbaySemanticsIdentifierMatch> matches =
      <PatchbaySemanticsIdentifierMatch>[];

  void visit(SemanticsNode node) {
    final SemanticsData data = node.getSemanticsData();
    if (data.identifier == identifier) {
      final PatchbaySemanticsEntry entry = observe(node);
      matches.add(
        PatchbaySemanticsIdentifierMatch(
          nodeId: node.id,
          generation: entry.generation,
          value: data.value,
          obscured: data.flagsCollection.isObscured,
          invisible: node.isInvisible,
        ),
      );
    }
    node.visitChildren((SemanticsNode child) {
      visit(child);
      return true;
    });
  }

  visit(root);
  return PatchbaySemanticsIdentifierObservation(
    treeRevision: _treeRevision,
    matches: List<PatchbaySemanticsIdentifierMatch>.unmodifiable(matches),
  );
}