Skip to content

Commit 397e4e3

Browse files
add BackHandler for navigating to current home back stack
1 parent 5cfcb45 commit 397e4e3

1 file changed

Lines changed: 20 additions & 5 deletions

File tree

Tutorial3-1Navigation/src/main/java/com/smarttoolfactory/tutorial3_1navigation/Tutorial3_2BottomNavigationNestedNavigation.kt

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
package com.smarttoolfactory.tutorial3_1navigation
44

55
import android.annotation.SuppressLint
6+
import androidx.activity.compose.BackHandler
67
import androidx.collection.forEach
78
import androidx.compose.animation.AnimatedContentTransitionScope.SlideDirection
89
import androidx.compose.animation.core.tween
@@ -52,6 +53,7 @@ import androidx.navigation.NavDestination
5253
import androidx.navigation.NavDestination.Companion.hasRoute
5354
import androidx.navigation.NavDestination.Companion.hierarchy
5455
import androidx.navigation.NavGraph
56+
import androidx.navigation.NavGraph.Companion.findStartDestination
5557
import androidx.navigation.NavGraphBuilder
5658
import androidx.navigation.NavHostController
5759
import androidx.navigation.compose.NavHost
@@ -160,11 +162,6 @@ private fun MainContainer(
160162
)
161163
},
162164
bottomBar = {
163-
164-
var lastSaveId by remember {
165-
mutableIntStateOf(0)
166-
}
167-
168165
NavigationBar(
169166
modifier = Modifier.height(56.dp),
170167
tonalElevation = 4.dp
@@ -221,6 +218,19 @@ private fun MainContainer(
221218
}
222219
}
223220

221+
@Composable
222+
private fun BackHome(
223+
navController: NavController,
224+
) {
225+
BackHandler {
226+
navController.navigate(BottomNavigationRoute.HomeGraph) {
227+
launchSingleTop = true
228+
restoreState = true
229+
popUpTo(navController.graph.findStartDestination().id) { saveState = true }
230+
}
231+
}
232+
}
233+
224234
/**
225235
* @param onGoToProfileScreen lambda for navigating Profile screen from current screen with top NavHostController
226236
* @param onBottomScreenClick lambda for navigating with [nestedNavController] in BottomNavigation
@@ -265,6 +275,7 @@ private fun NavGraphBuilder.addBottomNavigationGraph(
265275
startDestination = BottomNavigationRoute.SettingsRoute1
266276
) {
267277
composable<BottomNavigationRoute.SettingsRoute1> { from: NavBackStackEntry ->
278+
BackHome(navController = nestedNavController)
268279
Screen(
269280
text = "Settings Screen",
270281
navController = nestedNavController,
@@ -275,6 +286,7 @@ private fun NavGraphBuilder.addBottomNavigationGraph(
275286
}
276287

277288
composable<BottomNavigationRoute.SettingsRoute2> { from: NavBackStackEntry ->
289+
BackHome(navController = nestedNavController)
278290
Screen(
279291
text = "Settings Screen2",
280292
navController = nestedNavController,
@@ -285,6 +297,7 @@ private fun NavGraphBuilder.addBottomNavigationGraph(
285297
}
286298

287299
composable<BottomNavigationRoute.SettingsRoute3> { from: NavBackStackEntry ->
300+
BackHome(navController = nestedNavController)
288301
Screen(
289302
text = "Settings Screen3",
290303
navController = nestedNavController
@@ -293,6 +306,7 @@ private fun NavGraphBuilder.addBottomNavigationGraph(
293306
}
294307

295308
composable<BottomNavigationRoute.FavoritesRoute> { from: NavBackStackEntry ->
309+
BackHome(navController = nestedNavController)
296310
Screen(
297311
text = "Favorites Screen",
298312
navController = nestedNavController,
@@ -306,6 +320,7 @@ private fun NavGraphBuilder.addBottomNavigationGraph(
306320
}
307321

308322
composable<BottomNavigationRoute.NotificationRoute> { from: NavBackStackEntry ->
323+
BackHome(navController = nestedNavController)
309324
Screen(
310325
text = "Notifications Screen",
311326
navController = nestedNavController,

0 commit comments

Comments
 (0)