getCaretX method

double? getCaretX(
  1. String fragmentId,
  2. int localOffset
)

Returns the global x coordinate (logical pixels) of the caret for fragmentId at localOffset. Returns null if the fragment does not belong to this paragraph (used by ParagraphRegistry to iterate).

Implementation

double? getCaretX(String fragmentId, int localOffset) {
  final globalOffset = _localToGlobal(fragmentId, localOffset);
  if (globalOffset == null) return null;

  TextBox? charBox;
  final textLength = _painter.text?.toPlainText().length ?? 0;
  if (globalOffset > 0 && globalOffset <= textLength) {
    final boxes = _painter.getBoxesForSelection(
      TextSelection(baseOffset: globalOffset - 1, extentOffset: globalOffset),
    );
    if (boxes.isNotEmpty) charBox = boxes.first;
  } else if (globalOffset == 0 && textLength > 0) {
    final boxes = _painter.getBoxesForSelection(
      TextSelection(baseOffset: 0, extentOffset: 1),
    );
    if (boxes.isNotEmpty) charBox = boxes.first;
  }

  final xAlign = _alignmentXOffset;
  if (charBox != null) {
    final x = globalOffset == 0 ? charBox.left : charBox.right;
    return localToGlobal(Offset(x + xAlign, 0)).dx;
  }

  final caretOffset = _painter.getOffsetForCaret(
    TextPosition(offset: globalOffset),
    Rect.zero,
  );
  return localToGlobal(Offset(caretOffset.dx + xAlign, caretOffset.dy)).dx;
}