---
# System prepended metadata

title: CSA0X Cambia de opinión con `Switch`
tags: [blog, compose, csa]

---

# CSA0X Cambia de opinión con `Switch`

###### tags: `blog`, `compose`, `csa`

## La función `Switch`

La función componible `Switch` nos proveerá la opción de alternar entre dos estados, encendio y apagado. Para usarlo, deberemos indicar el estado inicial, además de la función que responderá al evento de cambiar de estado.

```kotlin
Switch(
    checked = true,
    onCheckedChange = { /*TODO*/ }
)
```

![Switch example](https://i.imgur.com/JAaf8wM.png)

La lista de atributos de Switch es la que sigue:

```kotlin=
@Composable
@OptIn(ExperimentalMaterialApi::class)
fun Switch(
    checked: Boolean,
    onCheckedChange: ((Boolean) -> Unit)?,
    modifier: Modifier = Modifier,
    enabled: Boolean = true,
    interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
    colors: SwitchColors = SwitchDefaults.colors()
)
```

- **checked**: Indica si está marcado o no.
- **onCheckedChange**: Evento que responde al cambio de estado entre marcado o no.
- **modifier**: Modificador aplicado al conmutador.
- **enabled**: Define si el conmutador está o no habilitado.
- **interactonState**: Estados de interacción del conmutador.
- **colors**: Colores aplicados al conmutador. Por defecto será el color secundario de la aplicación el que se aplique.

## Gestionar el cambio de marcado a no marcado

Creamos una val `isChecked` usando la función `remember` pasándole a la lambda un estado de Boolean mutable. Cuando declaremos la función Switch, pasaremos como parámetro `checked` el `value` de `isChecked` y en el parámetro `onCheckedChange` pasamos la lamda que actualice el valor del estado dependiendo de si el conmutador está marcado o no.
 
```kotlin=
fun SwitchStateExample() {
    val isChecked = remember {
        mutableStateOf(false)
    }
    Switch(
        checked = isChecked.value,
        onCheckedChange = { checked ->
            isChecked.value = checked
        }
    )
}
```

## Coloreemos al gusto nuestro conmutador

El parámetro color de `Switch` es una interfaz `SwitchColors` que define una serie de colores y transparencias aplicadas a cada parte y estado del conmutador.

- **Thumb**

|  | checked | unchecked | 
| -------- | -------- | -------- |
| **enable** | checkedThumbColor | uncheckedThumbColor |
| **disable** | disableCheckedThumbColor | disableUncheckedThumbColor |

- **Track**

| | checked | unchecked | 
| -------- | -------- | -------- |
| **enable** | checkedTrackColor | uncheckedTrackColor |
| **disable** | disableCheckedTrackColor | disableUncheckedTrackColor |
| **alpha** | checkedTrackAlpha | uncheckedTrackAlpha |


Jugemos con los colores para ver los resultados. Empezamos aplicando color al `thumb` marcado y habilitado:

```kotlin=
@Composable
fun SwitchColorsThumbExample(){
    val isChecked = remember { mutableStateOf(true) }
    Switch(
        modifier = Modifier.padding(16.dp),
        checked = isChecked.value,
        onCheckedChange = { checked ->
            isChecked.value = checked
        },
        colors = SwitchDefaults.colors(
            checkedThumbColor = Color.Red
        )
    )
}
```

![Switch thumb red example](https://i.imgur.com/RFAiGhq.gif =200x400)

Si en su lugar coloreamos de rojo el `track`:
```kotlin=
    colors = SwitchDefaults.colors(
        checkedTrackColor = Color.Red
    )
```

![Switch track red example](https://i.imgur.com/5SMHcHL.gif =200x400)

Y además le aplicamos una transparencia:

```kotlin=
colors = SwitchDefaults.colors(
            checkedTrackColor = Color.Red,
            checkedTrackAlpha = 0.1f
        )
```

![Switch track red trasnparent example](https://i.imgur.com/OaoV38E.gif =200x400)

Y por último le damos color a todo lo habilitado

```kotlin=
    colors = SwitchDefaults.colors(
        checkedThumbColor = Color.Blue,
        checkedTrackColor = Color.Red,
        checkedTrackAlpha = 0.3f,
        uncheckedThumbColor = Color.LightGray,
        uncheckedTrackColor = Color.Magenta,
        uncheckedTrackAlpha = 0.1f,
    )
```

![Switch coloured example](https://i.imgur.com/AMpH9Jo.gif =200x400)

Podemos seguir coloreando para cuando el conmutador esté deshabilitado, pero ya podemos hacernos una idea de la flexibilidad de personalización que tenemos.