android - 包含 TextFieldValue(text ='' , selection=TextRange(0, 0), composition=null) 的 MutableState 无法使用当前的 SaveableStateRegistry 保存

标签 android textfield android-jetpack-compose

我正在尝试实现我的 TextField 只能接受 10 位数字的要求,并且我使用了“rememberSaveable”,这样当用户导航到另一个屏幕然后返回此屏幕时,在 TextField 中输入的数字不会丢失。
我使用了 rememberSaveable ,例如:
var 查询通过 rememberSaveable { mutableStateOf(TextFieldValue("")) }
然后我在我的 TextField 中使用它作为:

            val maxChar = 10

            TextField(
                    value = query,
                    onValueChange = {
                        if (it.text.length <= maxChar) query = it
                    },
                label = {
                    Text(
                        "Name as on PAN Card",
                        color = colorResource(id = R.color.bright_green),
                        fontSize = with(LocalDensity.current) { dimensionResource(id = R.dimen._12ssp).toSp() },
                        fontFamily = FontFamily(Font(R.font.poppins_regular)),
                        textAlign = TextAlign.Left

                    )
                },
                interactionSource = interactionSource,
                keyboardOptions = KeyboardOptions(keyboardType =KeyboardType.Number),


                    textStyle = TextStyle(
                    textAlign = TextAlign.Start,
                    color = colorResource(id = R.color.bright_green),
                    fontFamily = FontFamily(Font(R.font.poppins_regular)),

                    fontSize = with(LocalDensity.current) { dimensionResource(id = R.dimen._12ssp).toSp() }
                ),
                modifier = Modifier
                        .drawBehind {
                            val strokeWidth = indicatorWidth.value * density
                            val y = size.height - strokeWidth / 2
                            drawLine(
                                    indicatorColor,
                                    Offset(TextFieldPadding.toPx(), y),
                                    Offset(size.width - TextFieldPadding.toPx(), y),
                                    strokeWidth
                            )
                        }
                        .constrainAs(name) {
                            bottom.linkTo(glNameBottom)
                            start.linkTo(glLeft)
                            end.linkTo(glRight)
                            width = Dimension.fillToConstraints
                        }
                        .height((mHeight.value / 10.5).dp),
                colors = TextFieldDefaults.textFieldColors(
                    backgroundColor = Color.Transparent,
                    cursorColor = colorResource(id = R.color.bright_green),
                    focusedIndicatorColor = Transparent,
                    unfocusedIndicatorColor = Transparent,
                    disabledIndicatorColor = Transparent
                )
            )
但是在使用上面的代码时,我遇到了异常:
java.lang.IllegalArgumentException: MutableState containing TextFieldValue(text='', selection=TextRange(0, 0), composition=null) cannot be saved using the current SaveableStateRegistry. The default implementation only supports types which can be stored inside the Bundle. Please consider implementing a custom Saver for this class and pass it as a stateSaver parameter to rememberSaveable().
我该如何解决这个问题?

最佳答案

正如 documentation 上的建议对于BasicTextField ,您可以简单地使用 TextFieldValue.Saver :

var query by rememberSaveable(stateSaver = TextFieldValue.Saver) { mutableStateOf(TextFieldValue("")) }

关于android - 包含 TextFieldValue(text ='' , selection=TextRange(0, 0), composition=null) 的 MutableState 无法使用当前的 SaveableStateRegistry 保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68464612/

相关文章:

android - 错误信息;无法访问类 'androidx.compose.ui.Alignment.Horizontal' 。检查模块类路径是否缺少或冲突的依赖项

android - 在 iOS 项目中使用 Java 库

java - 如何布局2个按钮

ios - 点击文本字段中的电子邮件地址时激活 iOS 电子邮件应用程序

android - Jetpack Compose 中可调整大小的 BasicTextField

android - 启动新的撰写项目时出错 java.lang.AbstractMethodError

java - 将文本附加到 TextView 数据类型

java - 为什么这个 RecyclerView + CardView 示例不起作用?

javascript - 如何使文本字段坚持其在 extjs 中的标签?

带有对象参数的特定 UITextfield 的 Swift 2 addObserver