为什么我在 Jetpack Compose 中收到警告“可选修饰符参数应具有默认值修饰符”?

Hel*_*oCW 10 android android-jetpack-compose

我收到以下代码 A 的警告信息,为什么?

可选的 Modifier 参数应具有默认值 Modifier

代码A

@Composable
fun DisplayIcon(
    modifier: Modifier=Modifier.size(24.dp),
    icon: ImageVector,
    tint: Color = Color.Blue
) {
    Icon(icon, null, modifier = modifier, tint = tint)
}
Run Code Online (Sandbox Code Playgroud)

Jan*_*ína 7

这只是一个最佳实践。使用其他一些默认值可能会导致奇怪的情况 - 假设您想在列中使用此组件中的两个:

Column {
    DisplayIcon()
    DisplayIcon()
}
Run Code Online (Sandbox Code Playgroud)

一切都很好,但现在您想要对齐其中之一:

Column {
    DisplayIcon()
    DisplayIcon(modifier = Modifier.align(Alignment.End))
}
Run Code Online (Sandbox Code Playgroud)

突然之间,没有任何明显的原因,其中一个的大小与另一个不同。因此,您必须从实现中找出DisplayIcon发生了什么,然后也可能添加.size(24.dp)到您的对齐可组合项中。但现在你想更改默认大小,并且必须在许多不同的地方这样做......
这样的事情可能是更好的解决方案:

@Composable
fun DisplayIcon(
    modifier: Modifier = Modifier,
    icon: ImageVector,
    tint: Color = Color.Blue,
    size: Dp = 24.dp,
) {
    Icon(icon, null, modifier = modifier.size(size), tint = tint)
}
Run Code Online (Sandbox Code Playgroud)