From 9f4c4c7057d8d27c077217b8686ade8103701b76 Mon Sep 17 00:00:00 2001 From: sathwikcs <85106054+sathwikcs@users.noreply.github.com> Date: Wed, 16 Oct 2024 17:50:49 +0530 Subject: [PATCH] Navigation --- .../attendanceapp/AppNavigation.kt | 19 ++++---- .../attendanceapp/navigation/BottomNavBar.kt | 48 +++++++++++++++++++ 2 files changed, 58 insertions(+), 9 deletions(-) create mode 100644 app/src/main/java/in/sminnovations/attendanceapp/navigation/BottomNavBar.kt diff --git a/app/src/main/java/in/sminnovations/attendanceapp/AppNavigation.kt b/app/src/main/java/in/sminnovations/attendanceapp/AppNavigation.kt index ac11a04..3622322 100644 --- a/app/src/main/java/in/sminnovations/attendanceapp/AppNavigation.kt +++ b/app/src/main/java/in/sminnovations/attendanceapp/AppNavigation.kt @@ -1,5 +1,7 @@ package `in`.sminnovations.attendanceapp +import android.os.Build +import androidx.annotation.RequiresApi import androidx.compose.runtime.Composable import androidx.hilt.navigation.compose.hiltViewModel import androidx.navigation.NavHostController @@ -7,34 +9,33 @@ import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController import `in`.sminnovations.attendanceapp.screens.login.ui.LoginScreen -import `in`.sminnovations.attendanceapp.screens.home.navigationDrawer.ui.NavigationDrawer + @Composable fun AppNavigation() { val navController = rememberNavController() - NavigationHost(navController = navController) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) { + NavigationHost(navController = navController) + } } +@RequiresApi(Build.VERSION_CODES.O_MR1) @Composable fun NavigationHost(navController: NavHostController) { NavHost(navController = navController, startDestination = "login") { - // Login Screen Route composable("login") { LoginScreen( loginViewModel = hiltViewModel(), onLoginSuccess = { - // Navigate to the home screen after login success - navController.navigate("home") { - // Pop the login screen from the back stack + navController.navigate("main") { popUpTo("login") { inclusive = true } } } ) } - - composable("home") { - NavigationDrawer() + composable("main") { + MainScreen() } } } diff --git a/app/src/main/java/in/sminnovations/attendanceapp/navigation/BottomNavBar.kt b/app/src/main/java/in/sminnovations/attendanceapp/navigation/BottomNavBar.kt new file mode 100644 index 0000000..4988d7a --- /dev/null +++ b/app/src/main/java/in/sminnovations/attendanceapp/navigation/BottomNavBar.kt @@ -0,0 +1,48 @@ +package `in`.sminnovations.attendanceapp.navigation + +import androidx.compose.material3.NavigationBar +import androidx.compose.material3.NavigationBarItem +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.navigation.NavController +import androidx.navigation.compose.currentBackStackEntryAsState +import `in`.sminnovations.attendanceapp.navigation.data.BottomNavItem + + +@Composable +fun BottomNavigationBar( + navController: NavController, + items: List, +) { + NavigationBar { + val navBackStackEntry by navController.currentBackStackEntryAsState() + val currentRoute = navBackStackEntry?.destination?.route + items.forEach { item -> + NavigationBarItem(icon = { + BottomNavAnimatedIcon( + isSelected = currentRoute == item.route, + icon = item.icon, + selectedIcon = item.selectedIcon, + contentDescription = item.label + ) + }, + label = { Text(text = item.label) }, + alwaysShowLabel = true, + selected = currentRoute == item.route, + onClick = { + navController.navigate(item.route) { + navController.graph.startDestinationRoute?.let { route -> + popUpTo(route) { + saveState = true + } + } + launchSingleTop = true + restoreState = true + } + }) + } + } + +} +