convertKeyboardMoveTextPostion function

TextPosition? convertKeyboardMoveTextPostion(
  1. InlineSpan text,
  2. TextPosition? textPosition
)

Implementation

TextPosition? convertKeyboardMoveTextPostion(
  InlineSpan text,
  TextPosition? textPosition,
) {
  if (textPosition != null) {
    int caretOffset = textPosition.offset;
    if (caretOffset <= 0) {
      return textPosition;
    }
    int textOffset = 0;
    text.visitChildren((InlineSpan ts) {
      if (ts is SpecialInlineSpanBase) {
        final SpecialInlineSpanBase specialTs = ts as SpecialInlineSpanBase;
        final int length = specialTs.actualText.length;
        textOffset += length;

        ///make sure caret is not in text when deleteAll is true
        if (specialTs.deleteAll &&
            caretOffset >= specialTs.start &&
            caretOffset <= specialTs.end) {
          if (caretOffset == specialTs.start || caretOffset == specialTs.end) {
            return false;
          } else if (caretOffset == specialTs.start + 1) {
            caretOffset = specialTs.end;
          } else if (caretOffset == specialTs.end - 1) {
            caretOffset = specialTs.start;
          }
          return false;
        }
      } else {
        textOffset += getInlineOffset(ts);
      }

      if (textOffset >= textPosition.offset) {
        return false;
      }
      return true;
    });

    if (caretOffset != textPosition.offset) {
      return TextPosition(offset: caretOffset, affinity: textPosition.affinity);
    }
  }
  return textPosition;
}