为什么 Jetpack Compose Material 3 Card 可组合项的内容需要 ColumnScope?

问题描述 投票:0回答:1

我正在使用

Jetpack Compose
,最近注意到
Card
包中的
androidx.compose.material3
可组合项要求其内容在
ColumnScope.
中提供。具体来说,Card 函数的内容参数需要
 类型的 lambda @Composable ColumnScope.() -> Unit

为什么在这种情况下需要

ColumnScope
?使用
Card
组件有什么优势或功能?

我试图从官方文档中了解其用途,但找不到明确的解释。任何见解或澄清将不胜感激!

package androidx.compose.material3
@Composable
fun Card(
    modifier: Modifier = Modifier,
    shape: Shape = CardDefaults.shape,
    colors: CardColors = CardDefaults.cardColors(),
    elevation: CardElevation = CardDefaults.cardElevation(),
    border: BorderStroke? = null,
    content: @Composable ColumnScope.() -> Unit
) {
    Surface(
        modifier = modifier,
        shape = shape,
        color = colors.containerColor(enabled = true).value,
        contentColor = colors.contentColor(enabled = true).value,
        tonalElevation = elevation.tonalElevation(enabled = true, interactionSource =         null).value,
        shadowElevation = elevation.shadowElevation(enabled = true, interactionSource     = null).value,
        border = border,
    ) {
        Column(content = content)
    }
}
android-jetpack-compose android-jetpack-compose-material3
1个回答
0
投票

如果您查看Material3 卡片设计指南,您会在使用部分的最顶部找到以下行:

文本和图像等元素应以清晰指示层次结构的方式放置在卡片上。

这强烈指出了分层布局,通常与放置子项的垂直方向相关。

通过要求

ColumnScope
的内容具有
Card
,可以更轻松地提供符合设计指南的
Card
内容。因此,鼓励 Android 开发人员遵循设计指南,并在此过程中节省一些时间,因为他们可以直接在内容上使用所有
Modifier
,而这些内容通常仅可用于作为 
Column
 子级的可组合项。例如,您可以直接使用 
Modifier.align
 水平定位项目。

对我来说,这似乎是为了方便并鼓励遵循指南。这是我对此的看法,尽管可能没有明确的答案。

© www.soinside.com 2019 - 2024. All rights reserved.