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;
// Use the character box for precise X (left/right of the real box).
// More accurate than getOffsetForCaret which can round or be wrong
// near fragment borders or WidgetSpan.
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;
}
// Fallback
final caretOffset = _painter.getOffsetForCaret(
TextPosition(offset: globalOffset),
Rect.zero,
);
return localToGlobal(Offset(caretOffset.dx + xAlign, caretOffset.dy)).dx;
}