键入时出现具有多种样式的 TextField 问题。只有最后一个字符有样式

Issue with TextField with multiple styles when typing. Only last char is styled

在 UI 上选择一个按钮后,我想对输入的文本应用粗体样式 我不明白为什么只有最后一个字符是粗体,而前面的字符都设置为默认样式。 我究竟做错了什么?为什么 TextField 不记得以前加粗的内容?

示例:

我想要的: 这是我想要的文本示例

我得到的: 这是我想要的文本示例t

 val textState = remember { mutableStateOf(TextFieldValue()) }


TextField(
    value = textState.value,
    onValueChange = {

        val prevPos = textState.value.selection.start
     

        if (selectedButton1.value) {
            val annotatedString = buildAnnotatedString {
                append(it.text)

                addStyle(
                    SpanStyle(fontWeight = FontWeight.Bold),
                    prevPos,
                    it.text.length
                )
            }

            textState.value =  it.copy(annotatedString, it.selection, it.composition)
        } else {
            textState.value =  it
        }
    },

    placeholder = { Text(placeholder, style = textStyle) },
    modifier = modifier,
    enabled = enabled,
    textStyle = textStyle,...

每次计算之前的pos;因此它只是最后一个字符。由于光标移动,新的 TextFileValue 将使旧的 +1。 如果你想通过按下按钮进行选择,你可以使用另一种状态。

var prevPos by remember { mutableStateOf(0) }

在按钮中:

onClick = {
   // Before typing:
   prevPos = textState.value.selection.start
}