getTextRect method

Rect getTextRect(
  1. TextSelection selection,
  2. TextOverflowPosition position, {
  3. Offset? effectiveOffset,
  4. Rect caretPrototype = Rect.zero,
})

Implementation

Rect getTextRect(
  TextSelection selection,
  TextOverflowPosition position, {
  Offset? effectiveOffset,
  Rect caretPrototype = Rect.zero,
}) {
  effectiveOffset ??= Offset.zero;

  final List<TextBox> boxs = textPainter.getBoxesForSelection(
    selection,
    boxWidthStyle: selectionWidthStyle,
    boxHeightStyle: selectionHeightStyle,
  );
  if (boxs.isNotEmpty) {
    Rect? rect;
    for (final TextBox box in boxs) {
      final Rect boxRect = box.toRect();
      if (rect == null) {
        rect = boxRect;
      } else
      // if (rect.overlaps(boxRect))
      {
        rect = rect.expandToInclude(boxRect);
      }
      // line breaking
      //else {
      //  break;
      // }
    }
    return rect!.shift(effectiveOffset);
  } else {
    Rect? rect;
    for (int i = selection.baseOffset; i <= selection.extentOffset; i++) {
      final TextPosition textPosition = TextPosition(offset: i);
      final Offset offset =
          textPainter.getOffsetForCaret(textPosition, Rect.zero);
      final double? height =
          textPainter.getFullHeightForCaret(textPosition, caretPrototype);
      //assert(height != null, 'can\' find selection');
      if (rect == null) {
        rect = Rect.fromLTWH(offset.dx, offset.dy, 1, height ?? 0);
      } else {
        rect = rect.expandToInclude(
            Rect.fromLTWH(offset.dx, offset.dy, 1, height ?? 0));
      }
    }

    return rect!;
  }
}