selectWordsInRange method

void selectWordsInRange({
  1. required Offset from,
  2. Offset? to,
  3. required SelectionChangedCause cause,
})

Selects the set words of a paragraph in a given range of global positions.

The first and last endpoints of the selection will always be at the beginning and end of a word respectively.

This method is mainly used to translatef user inputs in global positions into a TextSelection. When used in conjunction with a EditableText, the selection change is fed back into TextEditingController.selection.

If you have a TextEditingController, it's generally easier to programmatically manipulate its value or selection directly.

Implementation

void selectWordsInRange(
    {required Offset from,
    Offset? to,
    required SelectionChangedCause cause}) {
  layoutText(minWidth: constraints.minWidth, maxWidth: constraints.maxWidth);
  if (onSelectionChanged != null) {
    final TextPosition firstPosition =
        textPainter.getPositionForOffset(globalToLocal(from - paintOffset));
    final TextSelection firstWord = selectWordAtOffset(firstPosition);
    final TextSelection lastWord = to == null
        ? firstWord
        : selectWordAtOffset(textPainter
            .getPositionForOffset(globalToLocal(to - paintOffset)));

    _handleSelectionChange(
      TextSelection(
        baseOffset: firstWord.base.offset,
        extentOffset: lastWord.extent.offset,
        affinity: firstWord.affinity,
      ),
      cause,
    );
  }
}