combineSemanticsInfo function
- List<
InlineSpanSemanticsInformation> infoList
Combines _semanticsInfo entries where permissible.
Consecutive inline spans can be combined if their InlineSpanSemanticsInformation.requiresOwnNode return false.
Implementation
List<InlineSpanSemanticsInformation> combineSemanticsInfo(List<InlineSpanSemanticsInformation> infoList) {
final List<InlineSpanSemanticsInformation> combined = <InlineSpanSemanticsInformation>[];
String workingText = '';
String workingLabel = '';
List<ui.StringAttribute> workingAttributes = <ui.StringAttribute>[];
for (final InlineSpanSemanticsInformation info in infoList) {
if (info.requiresOwnNode) {
combined.add(InlineSpanSemanticsInformation(
workingText,
semanticsLabel: workingLabel,
stringAttributes: workingAttributes,
));
workingText = '';
workingLabel = '';
workingAttributes = <ui.StringAttribute>[];
combined.add(info);
} else {
workingText += info.text;
final String effectiveLabel = info.semanticsLabel ?? info.text;
for (final ui.StringAttribute infoAttribute in info.stringAttributes) {
workingAttributes.add(
infoAttribute.copy(
range: TextRange(
start: infoAttribute.range.start + workingLabel.length,
end: infoAttribute.range.end + workingLabel.length,
),
),
);
}
workingLabel += effectiveLabel;
}
}
combined.add(InlineSpanSemanticsInformation(
workingText,
semanticsLabel: workingLabel,
stringAttributes: workingAttributes,
));
return combined;
}