Let's say I have 2 screens HomeScreen
and DetailScreen
and use compose navigation to navigate between screens.
The graph is HomeScreen
-> DetailScreen
.
When I pressed back on DetailScreen
and returned to HomeScreen
I want HomeScreen
reacted to that and had to call some method. I want HomeScreen composable to call some method every time he shows up on the screen. How to achieve that?
NavHost(
navController = navController,
startDestination = "Home"
) {
composable("Home") {
HomeScreen(
onDetailClick= {
navController.navigate("Detail")
}
)
}
composable("Detail") {
DetailScreen(
onBackClick= {
navController.popBackStack()
},
)
}
}
You should use NavHostController.navigateUp()
instead of NavHostController.popBackStack()
, then you can use LaunchedEffect
with a fixed value like Unit
for the key.
@Composable
HomeScreen() {
LaunchedEffect(key1 = Unit) {
Log.i("HomeScreen", "home screen visible")
// call your methods here
}
// the rest of HomeScreen code
}
But be careful because everytime configuration change occured it will also be re-executed.