Проблема с visualtransformation

У меня есть поля ввода текста:

var cardNumberRemember by rememberSaveable() { mutableStateOf("") }

OutlinedTextField(
        value = cardNumberRemember,
        onValueChange = {cardNumberRemember = it },
        keyboardOptions = KeyboardOptions.Default.copy(keyboardType = KeyboardType.Number),

      
        visualTransformation = { enteringValue.filter(it) },

        colors = TextFieldDefaults.textFieldColors(
            backgroundColor = White
        )
    )

Текст который я ввожу в поля, должен иметь форму: "0000 0000 0000 0000"

А вот класс с visualTransformation:

private val defaultCardNumber = "0000  0000  0000  0000"

fun filter(cardNumber: AnnotatedString): TransformedText {

    val trimmed = if (cardNumber.text.length >= 16) {
        cardNumber.text.substring(0..15)
    } else { cardNumber.text }

    val annotatedString = AnnotatedString.Builder().run {
        for (i in trimmed.indices) {
            append(trimmed[i])
            if (i % 4 == 3 && i != 15) {
                append(" ")
            }
        }
        pushStyle(SpanStyle(color = Color.LightGray))
        append(defaultCardNumber.takeLast(defaultCardNumber.length - length))
        toAnnotatedString()
    }

    val creditCardOffsetTranslator = object : OffsetMapping {
        override fun originalToTransformed(offset: Int): Int {
            if (offset <= 3) return offset
            if (offset <= 7) return offset + 1
            if (offset <= 11) return offset + 2
            if (offset <= 16) return offset + 3
            return 19
        }

        override fun transformedToOriginal(offset: Int): Int {
            if (offset <= 4) return offset
            if (offset <= 9) return offset - 1
            if (offset <= 14) return offset - 2
            if (offset <= 19) return offset - 3
            return 16
        }
    }

    return TransformedText(annotatedString, creditCardOffsetTranslator)
}

Проблема в том, что при двойном клике на поля ввода, приложения вылетает вот с такой ошибкой:

FATAL EXCEPTION: main
                 Process: com.example.cardinfo, PID: 2931
                 java.lang.IllegalStateException: OffsetMapping.transformedToOriginal returned invalid mapping: 5 -> 4 is not in range of original text [0, 0]
                    at androidx.compose.foundation.text.ValidatingOffsetMapping.transformedToOriginal(ValidatingOffsetMapping.kt:69)
                    at androidx.compose.foundation.text.TextFieldDelegate$Companion.setCursorOffset-ULxng0E$foundation_release(TextFieldDelegate.kt:225)
                    at androidx.compose.foundation.text.CoreTextFieldKt$CoreTextField$pointerModifier$1.invoke-k-4lQ0M(CoreTextField.kt:343)
                    at androidx.compose.foundation.text.CoreTextFieldKt$CoreTextField$pointerModifier$1.invoke(CoreTextField.kt:338)
                    at androidx.compose.foundation.text.TextFieldPressGestureFilterKt$tapPressTextFieldModifier$1$2$2.invoke-k-4lQ0M(TextFieldPressGestureFilter.kt:82)
                    at androidx.compose.foundation.text.TextFieldPressGestureFilterKt$tapPressTextFieldModifier$1$2$2.invoke(TextFieldPressGestureFilter.kt:55)
                    at androidx.compose.foundation.gestures.TapGestureDetectorKt$detectTapAndPress$2$1.invokeSuspend(TapGestureDetector.kt:255)
                    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)

Ответы (0 шт):