# 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.