getSelectedRegisteredText method
Extracts the selected text across all registered participants.
Registered fragments are joined in reading order: top-to-bottom and then left-to-right, matching the behavior we want for shared drag selection inside a SelectionArea.
Implementation
String getSelectedRegisteredText() {
if (!hasSelection || _participants.isEmpty) return '';
final fragments = _participants.values.toList()
..sort((a, b) {
final aOrigin = a.globalOrigin;
final bOrigin = b.globalOrigin;
final byY = aOrigin.y.compareTo(bOrigin.y);
if (byY != 0) return byY;
return aOrigin.x.compareTo(bOrigin.x);
});
final selected = <String>[];
for (final fragment in fragments) {
final origin = fragment.globalOrigin;
final localStart = (
x: _selectionStart!.x - origin.x,
y: _selectionStart!.y - origin.y,
);
final localEnd = (
x: _selectionEnd!.x - origin.x,
y: _selectionEnd!.y - origin.y,
);
final text = extractSelectedText(
fragment.getContentLines(),
selectionStart: localStart,
selectionEnd: localEnd,
);
if (text.isNotEmpty) {
selected.add(text);
}
}
return selected.join('\n');
}