setMarkupText method

void setMarkupText(
  1. BuildContext context,
  2. String markupText
)

Implementation

void setMarkupText(BuildContext context, String markupText) {
  String deconstructedText = '';

  int lastStartingRunStart = 0;

  _cachedMentions.clear();

  for (int i = 0; i < markupText.length; ++i) {
    final String character = markupText[i];

    for (final MentionSyntax syntax in mentionSyntaxes) {
      if (character == syntax.prefix[0]) {
        final String subStr = markupText.substring(i, markupText.length);
        final RegExpMatch? match = syntax.getRegExp().firstMatch(subStr);
        // Ensure the match starts at the start of our substring
        if (match != null && match.start == 0) {
          deconstructedText += markupText.substring(lastStartingRunStart, i);

          final String matchedMarkup =
              match.input.substring(match.start, match.end);
          final String mentionId = match[3]!;
          final MentionObject? mention =
              idToMentionObject(context, mentionId);

          final String mentionDisplayName =
              mention?.displayName ?? syntax.missingText;

          final String insertText =
              '${syntax.startingCharacter}$mentionDisplayName';

          final int indexToInsertMention = deconstructedText.length;
          final int indexToEndInsertion =
              indexToInsertMention + insertText.length;

          _cachedMentions.add(_TextMention(
              id: mentionId,
              display: insertText,
              start: indexToInsertMention,
              end: indexToEndInsertion,
              syntax: syntax));

          deconstructedText += insertText;
          lastStartingRunStart = i + matchedMarkup.length;
        }
      }
    }
  }

  if (lastStartingRunStart != markupText.length) {
    deconstructedText +=
        markupText.substring(lastStartingRunStart, markupText.length);
  }

  _previousText = deconstructedText;
  text = deconstructedText;
}