You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jetpack Compose中BasicTextField触发IllegalStateException崩溃求助

解决Jetpack Compose中BasicTextField清空后输入崩溃的问题

问题原因

你的EditableText组件中,BasicTextField的decorationBox在文本为空时仅渲染提示文本,未调用innerTextField()。这会导致TextField的核心输入组件未被添加到布局树中,当清空文本后再次输入时,系统尝试访问核心组件的布局坐标,但该组件未附加到布局,从而抛出LayoutCoordinate operations are only valid when isAttached is true异常。

修复方案

无论文本是否为空,都必须调用innerTextField()以保证核心输入组件始终存在。通过Box将提示文本与输入组件重叠,利用文本状态控制提示的显示:

@Composable
fun EditableText(
    text: String,
    hint: String,
    onValueChange: (String) -> Unit,
    modifier: Modifier = Modifier
) {
    BasicTextField(
        modifier = modifier,
        value = text,
        onValueChange = onValueChange,
        textStyle = headline.copy(color = Color.White, textAlign = TextAlign.Start),
        singleLine = true,
        decorationBox = { innerTextField ->
            Box {
                // 始终调用innerTextField,确保核心输入组件存在于布局树
                innerTextField()
                // 文本为空时显示提示文本
                if (text.isEmpty()) {
                    Text(
                        text = hint,
                        textAlign = TextAlign.Start,
                        style = headline.copy(
                            color = Color.White.copy(alpha = 0.75f),
                            textAlign = TextAlign.Start
                        )
                    )
                }
            }
        }
    )
}

修复说明

innerTextField()是BasicTextField核心输入逻辑的入口,必须始终执行以维持组件的正常布局状态。提示文本通过Box与输入组件重叠,既实现了占位提示效果,又不会破坏TextField的内部布局依赖,彻底避免了布局坐标相关的崩溃问题。

内容的提问来源于stack exchange,提问作者Pavel Maiseichyk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 09:45:26