android - 在获得两个或更多修饰符的 Jetpack compose 组件中,应该如何命名修饰符参数?

标签 android kotlin android-jetpack-compose modifier

如果我们有一个 compose 组件有两个或多个修饰符,我们应该如何处理它? 我的意思是修饰符的命名,而 lint 提示更改修饰符参数的名称

易于理解的示例代码:

@Composable
    private fun CompletionSection(iconModifier: Modifier, textModifier: Modifier, isActivated: Boolean, newText: String?) {
        if (isActivated) {
            Icon(
                painter = painterResource(R.drawable.ds_ic_check_circle),
                modifier = iconModifier
                    .wrapContentSize()
                    .padding(top = 18.dp),
                tint = MaterialTheme.colors.positive,
                contentDescription = null
            )
        } else if (!newText.isNullOrBlank()) {
            Surface(
                modifier = textModifier.padding(top = 18.dp),
                shape = RoundedCornerShape(32.dp),
                border = BorderStroke(width = 2.dp, color = MaterialTheme.colors.primary.copy(alpha = 0.6f)),
            ) {
                Text(
                    overflow = TextOverflow.Ellipsis,
                    maxLines = 1,
                    fontSize = 11.sp,
                    color = MaterialTheme.colors.primary.copy(alpha = 0.6f),
                    text = newText,
                    modifier = Modifier
                        .defaultMinSize(minHeight = 20.dp)
                        .wrapContentSize()
                        .padding(horizontal = 6.dp, vertical = 2.dp),
                    style = MaterialTheme.typography.android.caption2
                )
            }
        }
    }

这里,函数使用的地方→

ConstraintLayout(
    modifier = Modifier.fillMaxSize(),
    constraintSet = decoupledConstraints(
        marginSpacing02 = marginSpacing02,
        marginSpacing01 = marginSpacing01,
        entity = entity
    )
) {
    
    CompletionSection(
        iconModifier = Modifier.layoutId("completedIcon"),
        textModifier = Modifier.layoutId("newTextField"),
        isActivated = isActivated,
        newText = newText
    )
}

最佳答案

我假设出现这种警告的原因是因为您通常有一个必须应用于整个 View 的修饰符。在参数中使用其他修饰符是可以的,但是,例如,如果您需要应用 Modifier.align,则必须复制它。

在您的情况下,当您从使用此函数的位置查看时,很难判断将应用哪个修饰符,哪个不应用 - 它取决于其他参数,您必须了解逻辑。

我认为至少它可以有一个名为 modifier 的通用修饰符,它适用于两个 View 和两个命名 View - 在我看来,这会使 API 更具可预测性。您可以像这样链接修饰符:modifier.then(iconModifier).yourModifier()

无论如何,你可以抑制它:

@SuppressLint("ModifierParameter")
@Composable
// ...

关于android - 在获得两个或更多修饰符的 Jetpack compose 组件中,应该如何命名修饰符参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71051736/

相关文章:

android - 无法访问 'setContent' : it is internal in 'androidx.compose.ui.platform'

android - Android 许可服务的问题

kotlin - 如何测试 lateinit var 是否从类外初始化? - Kotlin

android - Google API 中的server-key、android-key、browser-key 和iOS key 有什么区别?

spring-boot - Spring Boot Maven 插件错误 - 运行时发生异常。空 : NullPointerException

kotlin - 发行人赎回另一方持有的可替代代币

android - 如何从外部更新可组合状态?

android - 如何使用 Jetpack Compose 将相机预览缩放到半透明背景中的任何给定尺寸或形状

Android 偏好 - 在 SettingsActivity 中滚动到屏幕外时 SwtichPrefrence 发生变化

java - onClickListener onclicklistener Android Java编程