Android ComposeView, Composable is gone upon returning to Screen from stack
emitchel opened this issue · 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
react-native-community/discussions-and-proposals#446 (comment)
Project to repro (thanks to @thevoiceless) - https://github.com/thevoiceless/RN-Compose-Playground
problematic-compose-view.mov
Steps to reproduce
- Use a SimpleViewManager to wrap a ComposeView
- Build the ComposeView with a simple Text(..)
- But that ComposeView in Screen A
- Navigate to Screen B
- Navigate BACK to Screen A
- 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
Hey! 👋
The issue doesn't seem to contain a minimal reproduction.
Could you provide a snack or a link to a GitHub repository under your username that reproduces the problem?
Hi @emitchel, thanks for filling this issue!
Yeah, using Jetpack Compose along React Native Screens have already been heavily discussed in our internal Screens Team 😄 We've got this task of supporting Jetpack Compose on our agenda. Thanks!