gpt4 book ai didi

kotlin - 如何设置条件属性?

转载 作者:行者123 更新时间:2023-12-05 08:36:11 24 4
gpt4 key购买 nike

在 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)
)

实际上还有第三种情况,当您想根据条件应用或忽略特定的修饰符时。您可以使用 letrun 语句执行此操作,但使用扩展函数可以使代码更简洁。

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com