resolveSelectorChain function
SelectorResolution?
resolveSelectorChain(
- List<
SnapshotNode> nodes, - SelectorChain chain, {
- required String platform,
- bool requireRect = false,
- bool requireUnique = true,
- bool disambiguateAmbiguous = false,
Resolve a selector chain to a single node with options.
Implementation
SelectorResolution? resolveSelectorChain(
List<SnapshotNode> nodes,
SelectorChain chain, {
required String platform,
bool requireRect = false,
bool requireUnique = true,
bool disambiguateAmbiguous = false,
}) {
final diagnostics = <SelectorDiagnostics>[];
for (var i = 0; i < chain.selectors.length; i += 1) {
final selector = chain.selectors[i];
final summary = _analyzeSelectorMatches(
nodes,
selector,
platform,
requireRect,
);
diagnostics.add(
SelectorDiagnostics(selector: selector.raw, matches: summary.count),
);
if (summary.count == 0 || summary.firstNode == null) continue;
if (requireUnique && summary.count != 1) {
if (!disambiguateAmbiguous || summary.disambiguated == null) continue;
return SelectorResolution(
node: summary.disambiguated!,
selector: selector,
selectorIndex: i,
matches: summary.count,
diagnostics: diagnostics,
);
}
return SelectorResolution(
node: summary.firstNode!,
selector: selector,
selectorIndex: i,
matches: summary.count,
diagnostics: diagnostics,
);
}
return null;
}