From 3dd3d8ca84357cf483ecd23c4e1e12188c9cb21f Mon Sep 17 00:00:00 2001 From: Jakub Kosmydel Date: Thu, 13 Aug 2026 08:48:18 +0200 Subject: [PATCH 1/2] [General] Default GestureDetector moduleId to -1 Codegen's implicit Int32 default is 0, which is also the first RNGestureHandlerModule id. Props 2.0 diffs CREATE against that default and omits moduleId, so Android never calls setModuleId and the view stays at -1. Looking up registries[-1] then crashes on child remove. Co-authored-by: Cursor --- .../src/specs/RNGestureHandlerDetectorNativeComponent.ts | 2 +- .../src/specs/RNGestureHandlerRootViewNativeComponent.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/react-native-gesture-handler/src/specs/RNGestureHandlerDetectorNativeComponent.ts b/packages/react-native-gesture-handler/src/specs/RNGestureHandlerDetectorNativeComponent.ts index 08f169c165..0617534304 100644 --- a/packages/react-native-gesture-handler/src/specs/RNGestureHandlerDetectorNativeComponent.ts +++ b/packages/react-native-gesture-handler/src/specs/RNGestureHandlerDetectorNativeComponent.ts @@ -67,7 +67,7 @@ export interface NativeProps extends ViewProps { | undefined; handlerTags: CodegenTypes.Int32[]; - moduleId: CodegenTypes.Int32; + moduleId?: CodegenTypes.WithDefault; virtualChildren: VirtualChildrenProps[]; pointerEvents?: CodegenTypes.WithDefault< diff --git a/packages/react-native-gesture-handler/src/specs/RNGestureHandlerRootViewNativeComponent.ts b/packages/react-native-gesture-handler/src/specs/RNGestureHandlerRootViewNativeComponent.ts index 60b666ef7f..6497da2d34 100644 --- a/packages/react-native-gesture-handler/src/specs/RNGestureHandlerRootViewNativeComponent.ts +++ b/packages/react-native-gesture-handler/src/specs/RNGestureHandlerRootViewNativeComponent.ts @@ -7,7 +7,7 @@ export interface RootViewNativeProps extends ViewProps { } interface NativeProps extends ViewProps { - moduleId: CodegenTypes.Int32; + moduleId?: CodegenTypes.WithDefault; unstable_forceActive?: boolean; } From 35c04d90af28c63a03009e533ee2c26a1c0a0960 Mon Sep 17 00:00:00 2001 From: Jakub Kosmydel Date: Thu, 13 Aug 2026 09:20:35 +0200 Subject: [PATCH 2/2] [Android] Skip native detector detach when the registry is missing removeViewAt was throwing for the default moduleId of -1, which has no registry when the prop is omitted. Co-authored-by: Cursor --- .../gesturehandler/react/RNGestureHandlerDetectorView.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerDetectorView.kt b/packages/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerDetectorView.kt index 868e7c38e1..1f6bd81b88 100644 --- a/packages/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerDetectorView.kt +++ b/packages/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerDetectorView.kt @@ -230,8 +230,7 @@ class RNGestureHandlerDetectorView(context: Context) : ReactViewGroup(context) { } private fun detachNativeGestureHandlers() { - val registry = RNGestureHandlerModule.registries[moduleId] - ?: throw Exception("Tried to access a non-existent registry") + val registry = RNGestureHandlerModule.registries[moduleId] ?: return for (tag in nativeHandlers) { if (!attachedHandlers.contains(tag)) {