Compose 条件修饰符无法正常工作

问题描述 投票:0回答:1

我尝试在 Modifier 上创建一个扩展函数,以便仅在条件为真时才对其应用更改,因为我经常需要对 Modifier 对象进行小的更改,以防某些情况发生。但代码没有按预期工作,我似乎无法理解为什么。

这是扩展功能

inline fun Modifier.conditional(
    condition: Boolean,
    ifTrue: Modifier.() -> Modifier
): Modifier = if (condition) {
    ifTrue(this)
} else {
    this
}

这就是我使用它的方式:

@Composable
fun PlusMinusButton(
    text: String,
    enabled: Boolean,
    onClick: () -> Unit
) {
    Text(
        modifier = Modifier
            .width(60.dp)
            .background(
                color = if (enabled) Blue02 else Gray1,
                shape = RoundedCornerShape(8.dp)
            )
            .conditional(enabled) {
                clickable { onClick() }
            },
        text = text,
        textAlign = TextAlign.Center,
        fontSize = 32.sp,
        color = if (enabled) Blue06 else Blue02
    )
}

这就是预览中的样子:

只要条件为真,修饰符的其余部分似乎就会被忽略,并且不会应用背景。有什么想法可能导致这种情况吗?

android kotlin lambda android-jetpack-compose
1个回答
0
投票

这是 Katie Barnett 的此修改器版本

fun Modifier.conditional(
    condition: Boolean,
    ifTrue: Modifier.() -> Modifier,
    ifFalse: (Modifier.() -> Modifier)? = null,
): Modifier {
    return if (condition) {
        then(ifTrue(Modifier))
    } else if (ifFalse != null) {
        then(ifFalse(Modifier))
    } else {
        this
    }
}

您缺少

then()
,它将当前
Modifier
与传入的修饰符连接起来。在您的情况下,您实际上放弃了当前的修饰符链并切换到您的
ifTrue
修饰符链。

© www.soinside.com 2019 - 2024. All rights reserved.