在 Kotlin 中并使用 Jetpack Compose 我有很多代码,例如:
Box(
modifier = Modifier
.fillMaxHeight()
.requiredWidth(expandedSize)
.align(Alignment.Center)
)
但很多时候我想根据条件设置一个属性:
if(isFlag){
Box(
modifier = Modifier
.fillMaxHeight()
.requiredWidth(expandedSizeA)
.align(Alignment.Center)
)
} else {
Box(
modifier = Modifier
.fillMaxHeight()
.requiredWidth(expandedSizeB)
.align(Alignment.Center)
)
}
或条件如 requiredWidth()
或 padding()
if(isFlag){
Box(
modifier = Modifier
.fillMaxHeight()
.requiredWidth(expandedSizeA)
.align(Alignment.Center)
)
} else {
Box(
modifier = Modifier
.fillMaxHeight()
.padding(80.dp, 30.dp, 80.dp, 0.dp)
.align(Alignment.Center)
)
}
我敢打赌,有一种优雅的 Kotlin 方式可以做到这一点?
最佳答案
对于第一种情况,您可以在 requiredWidth
中使用 if
语句:
Box(
modifier = Modifier
.fillMaxHeight()
.requiredWidth(if(isFlag) expandedSizeA else expandedSizeB)
.align(Alignment.Center)
)
对于第二种情况,使用let
或者run
。
Box(
modifier = Modifier
.fillMaxHeight()
.run {
if(isFlag) requiredWidth(expandedSizeA)
else padding(80.dp, 30.dp, 80.dp, 0.dp)
}
.align(Alignment.Center)
)
实际上还有第三种情况,当您想根据条件应用或忽略特定的修饰符时。您可以使用 let
或 run
语句执行此操作,但使用扩展函数可以使代码更简洁。
fun Modifier.modifyIf(condition: Boolean, modify: Modifier.() -> Modifier) =
if (condition) modify() else this
用法:
Box(
modifier = Modifier
.fillMaxWidth()
.modifyIf(featureIsEnabled) {
clickable(onClick = handleClick)
}
.padding(24.dp)
)
如果 featureIsEnabled
为真,这里的框将是可点击的,否则不是。
关于kotlin - 如何设置条件属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69991681/