addNextOccurrence method
Adds the next occurrence of the primary selected text.
Search wraps once and skips ranges already represented in the set.
Implementation
bool addNextOccurrence() {
final active = selections;
final primary = active.primary;
if (primary == null || primary.isCollapsed) return false;
final query = _document.textInRange(
startOffset: primary.startOffset,
endOffset: primary.endOffset,
);
if (query.isEmpty) return false;
final result = findTextSearchMatches(
_document,
TextSearchQuery(pattern: query, caseSensitive: true),
);
if (result.matches.isEmpty) return false;
final ordered = [
...result.matches.where(
(match) => match.startOffset >= primary.endOffset,
),
...result.matches.where((match) => match.startOffset < primary.endOffset),
];
for (final match in ordered) {
final duplicate = active.ranges.any(
(range) =>
range.startOffset == match.startOffset &&
range.endOffset == match.endOffset,
);
if (duplicate) continue;
setSelections(
active.add(
TextSelectionRange(
startOffset: match.startOffset,
endOffset: match.endOffset,
),
),
);
return true;
}
return false;
}