ColumnScope 修饰符作为可组合项的参数

ColumnScope Modifier as a parameter of a composable

我正在制作一个类似于 compose 脚手架的可组合项,其中包含一个文本可组合项。我希望脚手架具有文本的修饰符参数。我希望能够从 ColumnScope 传递修饰符,例如能够对齐文本。

这里是脚手架的简化版本:

@Composable
fun MyScaffold(
    text: String,
    modifier: Modifier,
) {
    Text(
        modifier = modifier,
        text = text
    )
}

调用脚手架时,我想传递一个修饰符,使文本水平对齐:

@Preview
@Composable
fun PreviewScaffold() {
    MyScaffold(
        text = "Hello",
        modifier = Modifier.align(Alignment.CenterHorizontally)
    )
}

但是这不会编译,因为 align() 方法是 ColumnScope 中的一个扩展函数,所以它只在 ColumnsScope 中有效。

如何将 ColumnScope 修饰符作为 MyScaffold 的参数传递?

请注意,另一种方法是在脚手架中传递整个可组合文本,而不仅仅是一个字符串,但我宁愿只有一个字符串,这样我就可以在脚手架中进行大部分样式设置,但只是让外部调用者可以覆盖它。

谢谢!

使用 1.0.0,您可以将可组合项的范围限定在所需的范围内:

@Composable
fun ColumnScope.MyScaffoldX(
    text: String,
    modifier: Modifier,
) {
    Text(
        modifier = modifier.align(Alignment.CenterHorizontally),
        text = text
    )
}

然后将其用于:

Column() {
    MyScaffoldX(text = "Hello")
}

否则,您可以在可组合项中使用 Modifier 参数,如您的示例所示:

@Composable
fun MyScaffold(
    text: String,
    modifier: Modifier,
) {
    Text(
        modifier = modifier,
        text = text
    )
}

将其用于:

Column() {
    MyScaffold(
        text = "Hello",
        modifier = Modifier.align(Alignment.CenterHorizontally)
    )
}