Skip to content

Commit 7767ddf

Browse files
committed
Make toggles in the Settings screen smooth.
1 parent 4d379a0 commit 7767ddf

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

src/components/settings/Setting.tsx

+7-3
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,15 @@ const Setting = <T extends string | boolean>({
2626
const [modalContent, setModalContent] = useState(
2727
typeof value === 'string' ? value : ''
2828
)
29+
// This is used for toggles because the upper value is not updated immediately, resulting in judder.
30+
const [toggleValue, setToggleValue] = useState(value)
31+
2932
const Wrapper = setValue || onClick ? Pressable : React.Fragment
3033
const wrapperPress = () => {
3134
if (onClick) onClick()
3235
else if (typeof value === 'boolean' && setValue) {
33-
setValue(!value as T)
36+
setValue(!toggleValue as T)
37+
setToggleValue(!toggleValue as T)
3438
} else if (typeof value === 'string' && setValue && !modalOpen) {
3539
setModalOpen(true)
3640
setModalContent(value)
@@ -66,10 +70,10 @@ const Setting = <T extends string | boolean>({
6670
{value || 'N/A'}
6771
</Text>
6872
)}
69-
{typeof value === 'boolean' && (
73+
{typeof toggleValue === 'boolean' && (
7074
<>
7175
<View style={globalStyle.flexSpacer} />
72-
<Switch value={value} onValueChange={wrapperPress} />
76+
<Switch value={toggleValue} onValueChange={wrapperPress} />
7377
</>
7478
)}
7579
</View>

0 commit comments

Comments
 (0)