kotlin - 如何设置条件属性?

标签 kotlin android-jetpack-compose

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

相关文章:

Kotlin 按降序对 hashmap 进行排序

kotlin - 如何使用 http4k 项目中的 http4k-jsonrpc?

android - 当回调是类的字段时,将回调转换为suspendCoroutine

android - 默认样式 Jetpack 组合

android - 如何在 Jetpack Compose 中将 TextUnit 转换为 Dp?

java - 不幸的是 MyApp 已停止。我该如何解决这个问题?

java - hibernate 验证不使用 Spring Boot LocalValidatorFactoryBean

android-studio - 如何更改 FAB 上的图标并将项目重新定位到 Jetpack Compose 的末尾/右侧?

android - AnimatedVisibility 和 SwipeToDismiss Enter 动画不触发 - Jetpack Compose

android - 如何使用 Jetpack Compose 创建 HSL 饱和度和亮度变化渐变或画笔编辑器?