Dynamic Navigation Node
We can define a dynamic NavigationKey that renders a different navigation node based on the current screen width for example. Even if we change the navigation node from a Dialog to a BottomSheet we can persist the same ViewModel and SavedStateRegistry. To share some UI State between the two types, make sure to add a key to your rememberSaveable call, since they are rendered in different containers, they have different compositionKeyHash which is used to automatically key the rememberSaveable calls.
val navigator = rememberNavigator {
if (screenWidth <= 600) {
dialog<DynamicKey> { DynamicContent() }
} else {
bottomSheet<DynamicKey> { DynamicContent() }
}
}
@Composable
fun DynamicContent() {
// This saveable text will be persistent even if we change from a dialog to a bottomsheet!
val someText = rememberSaveable(key = "text-key") { mutableStateOf("Text") }
}Last updated