getCaretX method
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;
}