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)
)
}
我正在制作一个类似于 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)
)
}