为什么border
修饰符在与.apply { }
一起使用时不应用?
val selected = remember { mutableStateOf(true) }
val selectableModifier = Modifier
.padding(horizontal = 5.dp, vertical = 8.dp)
.apply {
// this changes, but border is not applied
println("$selected changed")
if (selected) {
border(
BorderStroke(1.dp, MaterialTheme.colors.primaryVariant),
RoundedCornerShape(13.dp)
)
}
}
2条答案
按热度按时间7fhtutme1#
apply
总是返回this
到输出。你可以在里面改变this
,但是如果修改器是不可变的,你期望基于当前的修改器创建一个新的修改器。这就是为什么你的border
被忽略了。相反,您可以使用
run
,并且必须返回一些内容:新创建的修饰符或this
。查看更多关于kotlin scope functions的信息。ia2d9nvy2#
当你调用一个修饰符的方法时,它会返回修饰符本身以及新的修改。所以你必须做一些类似的事情
或使用
您可以使条件然后扩展方法。
像这样使用它