我正在制作一个类似脚手架的可组合组件,其中包含可组合的文本。我希望脚手架具有文本的修饰符参数。我希望能够从 ColumnScope 传递修饰符,例如能够对齐文本。
这是脚手架的简化版本:
@Composable
fun MyScaffold(
text: String,
modifier: Modifier,
) {
Text(
modifier = modifier,
text = text
)
}
在调用 Scaffold 时,我想传递一个修饰符,以便文本水平对齐:
@Preview
@Composable
fun PreviewScaffold() {
MyScaffold(
text = "Hello",
modifier = Modifier.align(Alignment.CenterHorizontally)
)
}
但是这不会编译,因为 align() 方法是 ColumnScope 中的扩展函数,因此它仅在 ColumnsScope 内部时才有效。
如何将 ColumnScope 修饰符作为 MyScaffold 的参数传递?
请注意,另一种方法是在脚手架中传递可组合的整个文本,而不仅仅是一个字符串,但我宁愿只有一个字符串,以便我可以在脚手架内制作大部分样式,但只需给出外部调用者可以覆盖它。
谢谢!
答案 0 :(得分:2)
使用 1.0.0
(使用 1.0.0-beta07
测试),您可以使用所需的范围来确定可组合的范围:
@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)
)
}