Gautam Lad
03/17/2024, 3:13 PMNavHost
to get access to the navArguments
that were provided to activity that is showing the composable...see 🧵 with code snippet of what I am trying to do.Gautam Lad
03/17/2024, 3:14 PM// ComposeActivity.kt
class ComposeActivity : ComponentActivity() {
private val imageUrl by lazy {
checkNotNull(getNavArguments()).getString("image_url")
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
NavigationHost(imageUrl = imageUrl)
}
}
}
// NavigationHost.kt
@Composable
fun NavigationHost(imageUrl: String) {
val navController = rememberNavController()
CompositionLocalProvider(LocalNavController provides navController) {
NavHost(navController, startDestination = "showImage/{imageUrl}") {
composable(
route = "showImage/{imageUrl}",
arguments = listOf(navArgument("imageUrl") {
type = NavType.StringType
defaultValue = imageUrl
})
) {
ShowImageScreen()
}
}
}
}
// ShowImageScreen.kt
@Composable
fun ShowImageScreen(
viewModel: ShowImageViewModel = viewModel(factory = ShowImageViewModel.Factory)
) { ... }
// ShowImageViewModel.kt
class ShowImageViewModel(savedStateHandle: SavedStateHandle) : ViewModel() {
private val imageUrl by lazy {
savedStateHandle.get<String>("imageUrl")
}
}
Gautam Lad
03/17/2024, 3:15 PMonCreate
via the line NavigationHost(imageUrl = imageUrl)
I am wondering if that is my only option or if the NavigationHost is somehow able to access the navArguments of the activity?Gautam Lad
03/17/2024, 3:21 PM// NavigationHost.kt
@Composable
fun NavigationHost() {
val navArguments = checkNotNull(LocalContext.current as Activity).navArguments<Bundle>())
val imageUrl = navArguments.getString("image_url")
Gautam Lad
03/17/2024, 3:26 PMStylianos Gakis
03/17/2024, 3:30 PMGautam Lad
03/17/2024, 3:31 PMStylianos Gakis
03/17/2024, 3:32 PMStylianos Gakis
03/17/2024, 3:32 PMGautam Lad
03/17/2024, 3:36 PM