observeIdentifier method
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),
);
}