我有一个可组合,它将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,
)
}