Si tenemos un componente de composición que obtiene dos o más modificadores, ¿cómo debemos manejarlo? Me refiero a la denominación de modificadores mientras que pelusa se queja de cambiar el nombre del parámetro modificador
Ejemplo de código para averiguarlo fácilmente:
@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 ) } } }Aquí, donde se usa la función →
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 ) }Supongo que el motivo de este tipo de advertencia es que generalmente tiene un modificador que debe aplicarse a toda la vista. Tener otro modificador en los argumentos está bien, pero, por ejemplo, si necesita aplicar Modifier.align , tuvo que duplicarlo.
En su caso, cuando mira desde dónde está usando esta función, es difícil saber qué modificador se aplicará y cuál no; depende de otros parámetros y debe conocer la lógica.
Creo que al menos podría tener un modificador genérico llamado modifier , que se aplicaría a ambas vistas y dos con nombre; en mi opinión, esto haría que la API fuera un poco más predecible. Puede encadenar modificadores como este: modifier.then(iconModifier).yourModifier()
De todos modos, puedes suprimirlo:
@SuppressLint("ModifierParameter") @Composable // ...Los componibles están diseñados para aceptar solo un Modifier , por lo que la pelusa no se satisfará sin importar cómo los cambie de nombre.
El Composable es algo así como una unidad de interfaz, y al tener múltiples modificadores está filtrando su funcionamiento interno a los componibles externos que lo usan.