如何在Jetpack Compose中组合多个修改器对象



我有一个可组合,它将Modifier实例传递给它的子可组合,如下所示:

@Composable
fun MyComposable(
modifier: Modifier = Modifier,
content: @Composable BoxScope.() -> Unit,
) {
Box(
modifier = modifier.fillMaxWidth(),
content = content,
)
}

这会将fillMaxWidth修饰符添加到modifier参数中。然而,这不是所需的行为,因为我希望fillMaxWidth是默认宽度,但仍然允许调用方覆盖它

如何将两个修饰符组合/合并,同时将本地修饰符设为默认修饰符?

您可以简单地使用Modifier.then(otherModifier)。注意:顺序很重要,你可能需要考虑你自己添加了什么,以及你从外部添加了什么。

composed用于有状态修饰符,例如当您想要实现自定义触摸控件时,每次发生任何更改都会调用您。参见组合文档

使用Modifier.composed函数。

@Composable
fun MyComposable(
modifier: Modifier = Modifier,
content: @Composable BoxScope.() -> Unit,
) {
OtherComposable(
modifier = Modifier.fillMaxWidth().composed { modifier },
content = content,
)
}

使用Modifier.then函数。

@Composable
fun MyComposable(
modifier: Modifier = Modifier,
content: @Composable BoxScope.() -> Unit,
) {
OtherComposable(
modifier = Modifier.fillMaxWidth().then(modifier),
content = content,
)
}

最新更新