Fix "Tried to synchronously call a Remote Function" crash (#11517)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Tomasz Zawadzki
2026-08-20 17:56:50 +02:00
committed by GitHub
parent 56e16fcdf1
commit a892057e29
13 changed files with 31 additions and 39 deletions
+4 -4
View File
@@ -124,14 +124,14 @@ export function Splash(props: React.PropsWithChildren<Props>) {
if (isReady) {
SplashScreen.hideAsync()
.then(() => {
intro.set(() =>
intro.set(
withTiming(
1,
{duration: 400, easing: Easing.out(Easing.cubic)},
() => {
'worklet'
// set these values to check animation at specific point
outroLogo.set(() =>
outroLogo.set(
withTiming(
1,
{duration: 1200, easing: Easing.in(Easing.cubic)},
@@ -140,13 +140,13 @@ export function Splash(props: React.PropsWithChildren<Props>) {
},
),
)
outroApp.set(() =>
outroApp.set(
withTiming(1, {
duration: 1200,
easing: Easing.inOut(Easing.cubic),
}),
)
outroAppOpacity.set(() =>
outroAppOpacity.set(
withTiming(1, {
duration: 1200,
easing: Easing.in(Easing.cubic),
+1 -1
View File
@@ -72,7 +72,7 @@ export function AvatarBubbles({
if (!animate) return
const animateBubble = (p: SharedValue<number>, i: number) => {
p.set(0)
p.set(() =>
p.set(
withDelay(
500 + i * 100,
withTiming(1, {
+10 -16
View File
@@ -119,16 +119,12 @@ export default function ImageViewRoot({
// https://github.com/software-mansion/react-native-reanimated/issues/6677
rAF_FIXED(() => {
openProgress.set(() =>
isAnimated ? withClampedSpring(1, SLOW_SPRING) : 1,
)
openProgress.set(isAnimated ? withClampedSpring(1, SLOW_SPRING) : 1)
})
return () => {
// https://github.com/software-mansion/react-native-reanimated/issues/6677
rAF_FIXED(() => {
openProgress.set(() =>
isAnimated ? withClampedSpring(0, SLOW_SPRING) : 0,
)
openProgress.set(isAnimated ? withClampedSpring(0, SLOW_SPRING) : 0)
})
}
}, [nextLightbox, openProgress, thumbRects])
@@ -591,25 +587,23 @@ function LightboxImage({
// This is a bug in Reanimated, but for now we'll work around it like this.
dismissSwipeTranslateY.set(1)
}
dismissSwipeTranslateY.set(() => {
'worklet'
return withDecay({
dismissSwipeTranslateY.set(
withDecay({
velocity: e.velocityY,
velocityFactor: Math.max(3500 / Math.abs(e.velocityY), 1), // Speed up if it's too slow.
deceleration: 1, // Danger! This relies on the reaction below stopping it.
reduceMotion: ReduceMotion.Never, // If this animation doesn't run, the image gets stuck - therefore override Reduce Motion
})
})
}),
)
} else {
dismissSwipeTranslateY.set(() => {
'worklet'
return withSpring(0, {
dismissSwipeTranslateY.set(
withSpring(0, {
stiffness: 700,
damping: 50,
mass: 1,
reduceMotion: ReduceMotion.Never,
})
})
}),
)
}
})
+1 -1
View File
@@ -21,7 +21,7 @@ export function Loader(props: Props) {
}))
useEffect(() => {
rotation.set(() =>
rotation.set(
withRepeat(withTiming(360, {duration: 500, easing: Easing.linear}), -1),
)
}, [rotation])
+3 -3
View File
@@ -62,7 +62,7 @@ export const ProgressGuideToast = forwardRef<
// animate the opacity then set isOpen to false when done
const setIsntOpen = () => setIsOpen(false)
opacity.set(() =>
opacity.set(
withTiming(
0,
{
@@ -81,7 +81,7 @@ export const ProgressGuideToast = forwardRef<
// animate the vertical translation, the opacity, and the checkmark
const playCheckmark = () => animatedCheckRef.current?.play()
opacity.set(0)
opacity.set(() =>
opacity.set(
withTiming(
1,
{
@@ -92,7 +92,7 @@ export const ProgressGuideToast = forwardRef<
),
)
translateY.set(0)
translateY.set(() =>
translateY.set(
withTiming(insets.top + 10, {
duration: 500,
easing: Easing.out(Easing.cubic),
+2 -4
View File
@@ -41,10 +41,8 @@ export const AnimatedCheck = forwardRef<AnimatedCheckRef, AnimatedCheckProps>(
circleAnim.set(0)
checkAnim.set(0)
circleAnim.set(() =>
withTiming(1, {duration: 500, easing: Easing.linear}),
)
checkAnim.set(() =>
circleAnim.set(withTiming(1, {duration: 500, easing: Easing.linear}))
checkAnim.set(
withDelay(
500,
withTiming(1, {duration: 300, easing: Easing.linear}, cb),
+2 -2
View File
@@ -32,12 +32,12 @@ export function NewMessagesPill({
const onPressIn = useCallback(() => {
if (IS_WEB) return
scale.set(() => withTiming(1.075, {duration: 100}))
scale.set(withTiming(1.075, {duration: 100}))
}, [scale])
const onPressOut = useCallback(() => {
if (IS_WEB) return
scale.set(() => withTiming(1, {duration: 100}))
scale.set(withTiming(1, {duration: 100}))
}, [scale])
const onPress = useCallback(() => {
+1 -1
View File
@@ -78,7 +78,7 @@ export function SwipeToReply({
const runPop = () => {
'worklet'
if (isReducedMotion) return
iconScale.set(() =>
iconScale.set(
withSequence(
withTiming(1.2, {duration: 175}),
withTiming(1, {duration: 100}),
@@ -63,7 +63,7 @@ export function GestureActionView({
return
}
iconScale.set(() =>
iconScale.set(
withSequence(
withTiming(1.2, {duration: 175}),
withTiming(1, {duration: 100}),
@@ -205,7 +205,7 @@ export function GestureActionView({
scheduleOnRN(actions.rightFirst.action)
}
}
transX.set(() => withTiming(0, {duration: 200}))
transX.set(withTiming(0, {duration: 200}))
hitFirst.set(false)
hitSecond.set(false)
isActive.set(false)
+2 -2
View File
@@ -45,14 +45,14 @@ export function PressableScale({
onPressIn(e)
}
cancelAnimation(scale)
scale.set(() => withTiming(targetScale, {duration: 100}))
scale.set(withTiming(targetScale, {duration: 100}))
}}
onPressOut={e => {
if (onPressOut) {
onPressOut(e)
}
cancelAnimation(scale)
scale.set(() => withTiming(1, {duration: 100}))
scale.set(withTiming(1, {duration: 100}))
}}
style={[!reducedMotion && animatedStyle, style]}
{...rest}>
+1 -1
View File
@@ -33,7 +33,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
const setModeWorklet = useCallback(
(v: boolean) => {
'worklet'
footerMode.set(() =>
footerMode.set(
withSpring(v ? 1 : 0, {
...Reanimated3DefaultSpringConfig,
overshootClamping: true,
+1 -1
View File
@@ -104,7 +104,7 @@ export function MainScrollProvider({children}: {children: React.ReactNode}) {
const setMode = useCallback(
(v: boolean) => {
'worklet'
headerMode.set(() =>
headerMode.set(
withSpring(v ? 1 : 0, {
...Reanimated3DefaultSpringConfig,
overshootClamping: true,
+1 -1
View File
@@ -150,7 +150,7 @@ function HomeScreenReady({
const headerMode = useHomeHeaderMode()
const showHeader = useCallback(() => {
'worklet'
headerMode.set(() =>
headerMode.set(
withSpring(0, {
...Reanimated3DefaultSpringConfig,
overshootClamping: true,