我尝试在 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
)
}
这就是预览中的样子:
只要条件为真,修饰符的其余部分似乎就会被忽略,并且不会应用背景。有什么想法可能导致这种情况吗?
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
修饰符链。