使用Jetpack Compose的clickable修饰符时出现IR lowering后端错误如何解决?
问题原因
这个错误是Kotlin版本与Jetpack Compose版本不兼容导致的已知编译器问题,你当前使用的Kotlin 1.5.30和Compose 1.0.2没有官方适配,在处理带lambda的Compose Modifier参数时会触发IR lowering阶段的内部异常。
解决方案
- 方案1(最稳定):对齐官方兼容版本,将Kotlin版本从1.5.30降到1.5.21,Compose版本保持1.0.2不变,清理项目缓存后重新构建即可。
Jetpack Compose每个稳定版本都有严格匹配的Kotlin版本要求,1.0.x系列对应的兼容Kotlin版本就是1.5.21,版本对齐后不会出现这类编译异常。 - 方案2(保留高版本Kotlin):将Compose版本升级到1.1.0-alpha03及以上,该版本开始支持Kotlin 1.5.30,但注意alpha阶段版本可能存在其他API不稳定的问题。
- 临时规避方案:如果暂时不想调整依赖版本,可以将clickable的onClick lambda逻辑提前提取为独立变量,规避编译器异常,修改后的代码示例如下:
// 提前定义点击切换逻辑 val toggleCheck = { onCheckedChange(!checked) } Surface( modifier = Modifier .clickable( enabled = enabled, interactionSource = interactionSource, indication = rememberRipple(), role = Role.Checkbox, onClick = toggleCheck ) .then(modifier), ) { Row { Checkbox(checked = checked, onCheckedChange = {}, colors = colors) Text(text = text ?: "") } }
内容的提问来源于stack exchange,提问作者René Jörg Spies
相关产品推荐
相关产品推荐

