compiler-errors - 在简单设置中降低 IR 期间出现异常,撰写中可能存在错误?
问题描述
这个设置奇怪地抛出Exception during IR lowering
了,它与lazyColum、内部组合函数和Modifier
要重现错误/错误:
- 第 1 步:创建一个可组合的函数
@Composable
fun TheContent() {
}
- 第 2 步:设置惰性列
@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>()) {
}
}
)
}
至此,什么都不会被抛出,一切都会好起来的
第 4 步:引用惰性列表中的内部内容
@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()
}
}
)
}
现在,问题开始了。
- 注意:内部可组合函数中顶级可组合调用的修饰符不受影响。
- 注意:如果调用在lazyList 之外,编译器不会抱怨。
- 节点:如果内部可组合函数不是内部可组合函数,编译器不会抱怨。
- 注意:如果内部可组合函数在内部类中,编译器不会抱怨。
我的问题是:
- 如果这是一个错误或者我没有正确理解 compose
- 如果它是一个错误,那么它是否已修复,将很快修复,稍后修复,或者永远不会修复。
- 另外,解释为什么会这样?
解决方案
我不确定这是否是一个错误,我认为它不应该被修复。Compose 不适合那样使用
您应该只在顶级文件级别声明可组合函数
如果您需要在一个文件中重用可组合的一部分,只需将其设为私有,如下所示:
@Composable
fun TheContent() {
LazyColumn(
content = {
items(emptyList<Any>()) {
InnerContent()
}
}
)
}
@Composable
private fun InnerContent() {
...
}
这是为什么?因为将可组合项嵌入到其他项中会使代码的可读性大大降低
推荐阅读
- slack - Slack 机器人如何找到自己的 id?
- linker - 网站注册号以电话号码链接的形式出现,有没有办法逃脱?
- python - Selenium 的 XPath 问题
- python - 除了在 OpenCV (Python) 中作为坐标提供的多边形之外的遮光图像
- sql - 访问 - 选择从一对多表中返回“一”的查询
- reactjs - 从 react-redux、Parent vs Child 组件中使用 connect() 的首选方式是什么?
- swift - SpriteKit - 如何修复节点动画中的失真?
- xml - 如何使用带有约束的 DOM 针对 XSD 验证 XML?
- spring-data-mongodb - mongodb 的 querydsl 是否支持 $text (full text) 搜索?(使用带有spring数据mongodb的querydsl)
- r - R中自动一张一张选择图像文件的功能