combineSemanticsInfo function

List<InlineSpanSemanticsInformation> combineSemanticsInfo(
  1. 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;
}