From 5b66b440ce9df9acc5157ba01a0ae99c18d89e9a Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Mon, 9 Nov 2020 12:47:37 +0530 Subject: [PATCH] Separate out BottomNavigation to its own composable Signed-off-by: Harsh Shandilya --- .../lobsters/ui/main/MainActivity.kt | 47 +++++++++++-------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/main/MainActivity.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/main/MainActivity.kt index 8db25a43..75de07cf 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/ui/main/MainActivity.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/main/MainActivity.kt @@ -14,6 +14,7 @@ import androidx.compose.runtime.getValue import androidx.compose.ui.platform.setContent import androidx.compose.ui.res.stringResource import androidx.compose.ui.viewinterop.viewModel +import androidx.navigation.NavHostController import androidx.navigation.compose.KEY_ROUTE import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable @@ -57,26 +58,7 @@ fun LobstersApp() { Scaffold( bottomBar = { - BottomNavigation { - val navBackStackEntry by navController.currentBackStackEntryAsState() - val currentRoute = navBackStackEntry?.arguments?.getString(KEY_ROUTE) - destinations.forEach { screen -> - BottomNavigationItem( - icon = { IconResource(resourceId = screen.badgeRes) }, - label = { Text(stringResource(id = screen.labelRes)) }, - selected = currentRoute == screen.route, - onClick = { - // This if check gives us a "singleTop" behavior where we do not create a - // second instance of the composable if we are already on that destination - if (currentRoute != screen.route) { - // This is the equivalent to popUpTo the start destination - navController.popBackStack(navController.graph.startDestination, false) - navController.navigate(screen.route) - } - } - ) - } - } + LobstersBottomNav(navController, destinations) }, ) { val hottestPostsListState = rememberLazyListState() @@ -98,3 +80,28 @@ fun LobstersApp() { } } } + +@Composable +fun LobstersBottomNav( + navController: NavHostController, + destinations: Array, +) { + BottomNavigation { + val navBackStackEntry by navController.currentBackStackEntryAsState() + val currentRoute = navBackStackEntry?.arguments?.getString(KEY_ROUTE) + destinations.forEach { screen -> + BottomNavigationItem( + icon = { IconResource(resourceId = screen.badgeRes) }, + label = { Text(stringResource(id = screen.labelRes)) }, + selected = currentRoute == screen.route, + alwaysShowLabels = false, + onClick = { + navController.popBackStack(navController.graph.startDestination, false) + if (currentRoute != screen.route) { + navController.navigate(screen.route) + } + } + ) + } + } +}