如果我们有一个 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/