setMarkupText method
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;
}