首页 > 解决方案 > 在简单设置中降低 IR 期间出现异常,撰写中可能存在错误?

问题描述

这个设置奇怪地抛出Exception during IR lowering了,它与lazyColum、内部组合函数和Modifier

要重现错误/错误:

@Composable
fun TheContent() {

}
@Composable
fun TheContent() {
    LazyColumn(
        content = {
            items(emptyList<Any>()) {

            }
        }
    )
}
@Composable
fun TheContent() {
    @Composable
    fun InnerContent() {
        Row { //Box, Row, Column, etc.
            Box( //Box, Row, Column, etc.
                modifier = Modifier
                    .weight(1f, false) //Error
                    .weight(weight = 1f, fill =  false) //Error
                    .padding(vertical = 1.dp, horizontal = 1.dp) //Error
                    .padding(1.dp, 1.dp) //Ok
                    .padding(PaddingValues(vertical = 1.dp, horizontal = 1.dp)) // Error
                    .padding(top = 1.dp, bottom = 1.dp, start = 1.dp, end = 1.dp) //Error
                    .padding(PaddingValues(top = 1.dp, bottom = 1.dp, start = 1.dp, end = 1.dp)) // Error
                    .padding(1.dp, 1.dp, 1.dp, 1.dp) // Ok
                    .padding(1.dp) //Ok
                    .padding(PaddingValues(1.dp)) // Ok
                    .size(1.dp) //Ok
                    .clickable {} //Ok
                    .border(
                        border = BorderStroke(1.dp, Color.Black),
                        shape = RoundedCornerShape(1.dp)
                    ) //Ok
            ) {
            }
        }
    }

    LazyColumn(
        content = {
            items(emptyList<Any>()) {

            }
        }
    )
}
@Composable
fun TheContent() {
    @Composable
    fun InnerContent() {
        Row { //Box, Row, Column, etc.
            Box( //Box, Row, Column, etc.
                modifier = Modifier
                    .weight(1f, false) //Error
                    .weight(weight = 1f, fill =  false) //Error
                    .padding(vertical = 1.dp, horizontal = 1.dp) //Error
                    .padding(1.dp, 1.dp) //Ok
                    .padding(PaddingValues(vertical = 1.dp, horizontal = 1.dp)) // Error
                    .padding(top = 1.dp, bottom = 1.dp, start = 1.dp, end = 1.dp) //Error
                    .padding(PaddingValues(top = 1.dp, bottom = 1.dp, start = 1.dp, end = 1.dp)) // Error
                    .padding(1.dp, 1.dp, 1.dp, 1.dp) // Ok
                    .padding(1.dp) //Ok
                    .padding(PaddingValues(1.dp)) // Ok
                    .size(1.dp) //Ok
                    .clickable {} //Ok
                    .border(
                        border = BorderStroke(1.dp, Color.Black),
                        shape = RoundedCornerShape(1.dp)
                    ) //Ok
            ) {
            }
        }
    }

    LazyColumn(
        content = {
            items(emptyList<Any>()) {
                InnerContent()
            }
        }
    )
}

现在,问题开始了。


我的问题是:


完整的堆栈跟踪/编译器日志

标签: compiler-errorsandroid-jetpack-compose

解决方案


我不确定这是否是一个错误,我认为它不应该被修复。Compose 不适合那样使用

您应该只在顶级文件级别声明可组合函数

如果您需要在一个文件中重用可组合的一部分,只需将其设为私有,如下所示:

@Composable
fun TheContent() {
    LazyColumn(
        content = {
            items(emptyList<Any>()) {
                InnerContent()
            }
        }
    )
}

@Composable
private fun InnerContent() {
...
}

这是为什么?因为将可组合项嵌入到其他项中会使代码的可读性大大降低


推荐阅读