cancel animations before updating value for min-shell animation (#4386)

* cancel animations before updating value

* comment
zio/stable
Hailey 2024-06-06 06:28:02 -07:00 committed by GitHub
parent 85e676257e
commit 72f46ed734
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 10 additions and 2 deletions

View File

@ -1,5 +1,5 @@
import React from 'react'
import {SharedValue, useSharedValue, withSpring} from 'react-native-reanimated'
import {cancelAnimation, SharedValue, useSharedValue, withSpring} from 'react-native-reanimated'
type StateContext = SharedValue<number>
type SetContext = (v: boolean) => void
@ -17,6 +17,8 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
const setMode = React.useCallback(
(v: boolean) => {
'worklet'
// Cancel any existing animation
cancelAnimation(mode)
mode.value = withSpring(v ? 1 : 0, {
overshootClamping: true,
})

View File

@ -1,6 +1,10 @@
import React, {useCallback, useEffect} from 'react'
import {NativeScrollEvent} from 'react-native'
import {interpolate, useSharedValue} from 'react-native-reanimated'
import {
cancelAnimation,
interpolate,
useSharedValue,
} from 'react-native-reanimated'
import EventEmitter from 'eventemitter3'
import {ScrollProvider} from '#/lib/ScrollContext'
@ -117,6 +121,8 @@ export function MainScrollProvider({children}: {children: React.ReactNode}) {
const newValue = clamp(startMode.value + dProgress, 0, 1)
if (newValue !== mode.value) {
// Manually adjust the value. This won't be (and shouldn't be) animated.
// Cancel any any existing animation
cancelAnimation(mode)
mode.value = newValue
}
} else {