philipplackner / TypeSafeComposeNavigation

25 stars 3 forks source link

not able to hide login and signUp from current destination #1

Open PrityBarnwal opened 3 weeks ago

PrityBarnwal commented 3 weeks ago

class MainActivity : ComponentActivity() { @OptIn(ExperimentalMaterial3Api::class) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() setContent { NavigationAppTheme { val navController = rememberNavController()

            Scaffold(
                modifier = Modifier
                    .fillMaxSize()
                    .navigationBarsPadding(),
                bottomBar = {
                    BottomNavigationBar(navController = navController)
                },
                content = { padding ->
                    Box(modifier = Modifier.padding(padding)) {
                        NavHost(
                            navController = navController,
                            startDestination = LoginRoute
                        ) {
                            composable<LoginRoute> {
                                LoginScreen(navController = navController)
                            }
                            composable<SignInRoute> {
                                SignUpScreen(navController = navController)
                            }
                            composable<HomeRoute> {
                                val args = it.toRoute<HomeRoute>()
                                HomeScreen(args = args)
                            }
                            composable<ProfileRoute> {
                                ProfileScreen()
                            }
                            composable<SearchRoute> {
                                SearchScreen()
                            }
                        }
                    }
                }
            )
        }
    }
}

}

@Serializable object LoginRoute

@Serializable object SignInRoute

@Serializable data class HomeRoute( val email: String?, val password: String? )

@Serializable object SearchRoute

@Serializable object ProfileRoute

@Composable fun BottomNavigationBar(navController: NavHostController) { val items = listOf(HomeRoute, ProfileRoute, SearchRoute) var selectedPosition by remember { mutableIntStateOf(0) }

BottomNavigation {

    items.forEachIndexed { index, route ->
        BottomNavigationItem(
            icon = {
                when (route) {
                    HomeRoute -> Icon(Icons.Default.Home, contentDescription = "Home")
                    ProfileRoute -> Icon(Icons.Default.Person, contentDescription = "Profile")
                    SearchRoute -> Icon(Icons.Default.Search, contentDescription = "Search")
                }
            },
            selected = selectedPosition == index,
            onClick = {
                selectedPosition = index
                    navController.navigate(route) {
                        popUpTo(navController.graph.findStartDestination().id) {
                            saveState = true
                        }
                        launchSingleTop = true
                        restoreState = true
                    }
            }
        )
    }
}

}

PrityBarnwal commented 3 weeks ago

currentRoute?.destination?.route ask for string but here LoginScreen and other screen are in object