@@ -68,6 +68,7 @@ fun Switch(
6868 colors : SwitchColors = SwitchDefaults .switchColors(),
6969 enabled : Boolean = true
7070) {
71+ val isChecked by rememberUpdatedState(checked)
7172 val currentOnCheckedChange by rememberUpdatedState(onCheckedChange)
7273
7374 val interactionSource = remember { MutableInteractionSource () }
@@ -86,7 +87,7 @@ fun Switch(
8687
8788 var dragOffset by remember { mutableStateOf(0f ) }
8889 val thumbOffset by animateDpAsState(
89- targetValue = if (checked ) {
90+ targetValue = if (isChecked ) {
9091 if (! enabled) 26 .dp else if (isPressed || isDragged || isHovered) 24 .dp else 26 .dp
9192 } else {
9293 if (! enabled) 4 .dp else if (isPressed || isDragged || isHovered) 3 .dp else 4 .dp
@@ -100,11 +101,11 @@ fun Switch(
100101 )
101102
102103 val thumbColor by animateColorAsState(
103- if (checked ) colors.checkedThumbColor(enabled) else colors.uncheckedThumbColor(enabled)
104+ if (isChecked ) colors.checkedThumbColor(enabled) else colors.uncheckedThumbColor(enabled)
104105 )
105106
106107 val backgroundColor by animateColorAsState(
107- if (checked ) colors.checkedTrackColor(enabled) else colors.uncheckedTrackColor(enabled),
108+ if (isChecked ) colors.checkedTrackColor(enabled) else colors.uncheckedTrackColor(enabled),
108109 animationSpec = tween(durationMillis = 200 )
109110 )
110111
@@ -142,16 +143,16 @@ fun Switch(
142143 } while (event.changes.all { it.pressed })
143144
144145 if (validHorizontalDrag && ! isPressed && ! isDragged) {
145- currentOnCheckedChange?.invoke(! checked )
146+ currentOnCheckedChange?.invoke(! isChecked )
146147 hapticFeedback.performHapticFeedback(
147- if (checked ) HapticFeedbackType .ToggleOff
148+ if (isChecked ) HapticFeedbackType .ToggleOff
148149 else HapticFeedbackType .ToggleOn
149150 )
150151 }
151152 }
152153 }
153154 .toggleable(
154- value = checked ,
155+ value = isChecked ,
155156 onValueChange = {
156157 if (currentOnCheckedChange == null ) return @toggleable
157158 currentOnCheckedChange?.invoke(it)
@@ -201,11 +202,11 @@ fun Switch(
201202 hasVibratedOnce = false
202203 },
203204 onDragEnd = {
204- if (dragOffset.absoluteValue > 21f / 2 ) currentOnCheckedChange?.invoke(! checked )
205+ if (dragOffset.absoluteValue > 21f / 2 ) currentOnCheckedChange?.invoke(! isChecked )
205206 if (! hasVibratedOnce && dragOffset.absoluteValue >= 1f ) {
206- if ((checked && dragOffset <= - 11f ) || (! checked && dragOffset <= 10f )) {
207+ if ((isChecked && dragOffset <= - 11f ) || (! isChecked && dragOffset <= 10f )) {
207208 hapticFeedback.performHapticFeedback(HapticFeedbackType .ToggleOff )
208- } else if ((checked && dragOffset >= - 10f ) || (! checked && dragOffset >= 11f )) {
209+ } else if ((isChecked && dragOffset >= - 10f ) || (! isChecked && dragOffset >= 11f )) {
209210 hapticFeedback.performHapticFeedback(HapticFeedbackType .ToggleOn )
210211 }
211212 }
@@ -218,18 +219,18 @@ fun Switch(
218219 }
219220 ) { _, dragAmount ->
220221 dragOffset = (dragOffset + dragAmount / 2 ).let {
221- if (checked ) it.coerceIn(- 21f , 0f ) else it.coerceIn(0f , 21f )
222+ if (isChecked ) it.coerceIn(- 21f , 0f ) else it.coerceIn(0f , 21f )
222223 }
223224 if (dragOffset in - 11f .. - 10f || dragOffset in 10f .. 11f ) {
224225 hasVibratedOnce = false
225226 } else if (dragOffset in - 20f .. - 1f || dragOffset in 1f .. 20f ) {
226227 hasVibrated = false
227228 } else if (! hasVibrated) {
228- if ((checked && dragOffset == - 21f ) || (! checked && dragOffset == 0f )) {
229+ if ((isChecked && dragOffset == - 21f ) || (! isChecked && dragOffset == 0f )) {
229230 hapticFeedback.performHapticFeedback(HapticFeedbackType .ToggleOff )
230231 hasVibrated = true
231232 hasVibratedOnce = true
232- } else if ((checked && dragOffset == 0f ) || (! checked && dragOffset == 21f )) {
233+ } else if ((isChecked && dragOffset == 0f ) || (! isChecked && dragOffset == 21f )) {
233234 hapticFeedback.performHapticFeedback(HapticFeedbackType .ToggleOn )
234235 hasVibrated = true
235236 hasVibratedOnce = true
0 commit comments