react-native-screens icon indicating copy to clipboard operation
react-native-screens copied to clipboard

Android ComposeView, Composable is gone upon returning to Screen from stack

Open emitchel opened this issue 4 months ago • 2 comments

Description

tldr; Jetpack ComposeViews do not maintain state or recompose upon returning to a Screen with a ComposeView driving a component of the Screen.

Suppose you have three screens, screens A, B and C

Screen B has a View that links to a ComposeView(..) from Android Navigating to Screen C, then returning to Screen B, the ComposeView driven component is gone

According to this issue tracker, https://issuetracker.google.com/issues/284424175, the issue lies within how ScreenFragment recycles the views https://github.com/software-mansion/react-native-screens/blob/main/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt#L307-L321

https://github.com/react-native-community/discussions-and-proposals/issues/446#issuecomment-1012686694

Project to repro (thanks to @thevoiceless) - https://github.com/thevoiceless/RN-Compose-Playground

https://github.com/software-mansion/react-native-screens/assets/3791583/e0a08eb2-4eab-4ca1-ae8e-a3c4e37d1688

Steps to reproduce

  1. Use a SimpleViewManager to wrap a ComposeView
  2. Build the ComposeView with a simple Text(..)
  3. But that ComposeView in Screen A
  4. Navigate to Screen B
  5. Navigate BACK to Screen A
  6. Notice that the ComposeView is gone but the wrapper of the view itself is still in the hierarchy

Snack or a link to a repository

https://github.com/thevoiceless/RN-Compose-Playground

Screens version

3.21.0

React Native version

0.73.5

Platforms

Android

JavaScript runtime

None

Workflow

None

Architecture

None

Build type

None

Device

None

Device model

No response

Acknowledgements

Yes

emitchel avatar Apr 07 '24 00:04 emitchel