Skip to content

[V3] Android crash with RN Screens form sheet backdrop #4237

@iankberry

Description

@iankberry

Description

I am using form sheets from the react-navigation + react-native-screens libraries. In RNGH v3, when you tap the backdrop of an open form sheet, the app crashes with the following trace:

java.lang.IllegalStateException: [RNScreens] DimmingView should never be asked for the view tag!
  com.swmansion.rnscreens.bottomsheet.DimmingView.reactTagForTouch(DimmingView.kt:66)
  com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.recordViewHandlersForPointer(GestureHandlerOrchestrator.kt:577)
  com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.traverseWithPointerEvents(GestureHandlerOrchestrator.kt:707)
  com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.extractGestureHandlers(GestureHandlerOrchestrator.kt:642)
  com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.traverseWithPointerEvents(GestureHandlerOrchestrator.kt:681)
  com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.extractGestureHandlers(GestureHandlerOrchestrator.kt:642)
  com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.traverseWithPointerEvents(GestureHandlerOrchestrator.kt:701)
  com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.extractGestureHandlers(GestureHandlerOrchestrator.kt:642)
  com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.traverseWithPointerEvents(GestureHandlerOrchestrator.kt:681)
  com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.extractGestureHandlers(GestureHandlerOrchestrator.kt:642)
  com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.traverseWithPointerEvents(GestureHandlerOrchestrator.kt:681)
  com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.extractGestureHandlers(GestureHandlerOrchestrator.kt:642)
  com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.traverseWithPointerEvents(GestureHandlerOrchestrator.kt:681)
  com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.extractGestureHandlers(GestureHandlerOrchestrator.kt:642)
  com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.traverseWithPointerEvents(GestureHandlerOrchestrator.kt:701)
  com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.extractGestureHandlers(GestureHandlerOrchestrator.kt:642)
  com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.traverseWithPointerEvents(GestureHandlerOrchestrator.kt:701)
  com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.extractGestureHandlers(GestureHandlerOrchestrator.kt:642)
  com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.traverseWithPointerEvents(GestureHandlerOrchestrator.kt:701)
  com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.extractGestureHandlers(GestureHandlerOrchestrator.kt:642)
  com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.traverseWithPointerEvents(GestureHandlerOrchestrator.kt:701)
  com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.extractGestureHandlers(GestureHandlerOrchestrator.kt:642)
  com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.traverseWithPointerEvents(GestureHandlerOrchestrator.kt:681)
  com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.extractGestureHandlers(GestureHandlerOrchestrator.kt:642)
  com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.traverseWithPointerEvents(GestureHandlerOrchestrator.kt:701)
  com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.extractGestureHandlers(GestureHandlerOrchestrator.kt:642)
  com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.traverseWithPointerEvents(GestureHandlerOrchestrator.kt:701)
  com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.extractGestureHandlers(GestureHandlerOrchestrator.kt:642)
  com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.traverseWithPointerEvents(GestureHandlerOrchestrator.kt:701)
  com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.extractGestureHandlers(GestureHandlerOrchestrator.kt:642)
  com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.traverseWithPointerEvents(GestureHandlerOrchestrator.kt:701)
  com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.extractGestureHandlers(GestureHandlerOrchestrator.kt:604)
  com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.onTouchEvent(GestureHandlerOrchestrator.kt:56)
  com.swmansion.gesturehandler.react.RNGestureHandlerRootHelper.dispatchTouchEvent(RNGestureHandlerRootHelper.kt:130)
  com.swmansion.gesturehandler.react.RNGestureHandlerRootView.dispatchTouchEvent(RNGestureHandlerRootView.kt:58)
  android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3122)
  android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2746)
  android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3122)
  android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2746)
  android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3122)
  android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2746)
  android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3122)
  android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2746)
  android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3122)
  android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2746)
  android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3122)
  android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2746)
  android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3122)
  android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2746)
  android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3122)
  android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2746)
  com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:458)
  com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1980)
  android.app.Activity.dispatchTouchEvent(Activity.java:4533)
  androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
  expo.modules.devmenu.detectors.InterceptingWindowCallback.dispatchTouchEvent(InterceptingWindowCallback.kt:32)
  com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:416)
  android.view.View.dispatchPointerEvent(View.java:16729)
  android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:7947)
  android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:7710)
  android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:7106)
  android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:7163)
  android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:7129)
  android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:7295)
  android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:7137)
  android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:7352)
  android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:7110)
  android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:7163)
  android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:7129)
  android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:7137)
  android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:7110)
  android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:10214)
  android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:10165)
  android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:10134)
  android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:10356)
  android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:295)
  android.os.MessageQueue.nativePollOnce(Native Method)
  android.os.MessageQueue.next(MessageQueue.java:346)
  android.os.Looper.loopOnce(Looper.java:189)
  android.os.Looper.loop(Looper.java:317)
  android.app.ActivityThread.main(ActivityThread.java:8705)
  java.lang.reflect.Method.invoke(Native Method)
  com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580)
  com.android.internal.os.ZygoteInit.main(ZygoteInit.java:886)

Reproduction video:

Screen.Recording.2026-06-04.at.3.07.42.PM.mov

Steps to reproduce

  1. Checkout the repo
  2. Run yarn android
  3. Tap the 'open form sheet' button
  4. Tap the backdrop and the app will crash

A link to a Gist, an Expo Snack or a link to a repository based on this template that reproduces the bug.

https://github.com/iankberry/formsheet-android-backdrop-crash

Gesture Handler version

3.0.0

React Native version

0.85.3

Platforms

Android

JavaScript runtime

None

Workflow

None

Architecture

None

Build type

None

Device

None

Device model

No response

Acknowledgements

Yes

Metadata

Metadata

Assignees

No one assigned

    Labels

    Platform: AndroidThis issue is specific to AndroidRepro providedA reproduction with a snack or repo is provided

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions