Skip to content
Snippets Groups Projects

NavGraph.kt

  • Clone with SSH
  • Clone with HTTPS
  • Embed
  • Share
    The snippet can be accessed without any authentication.
    Authored by a6-alrashdi
    NavGraph.kt 4.26 KiB
    package com.example.match
    
    import androidx.compose.runtime.Composable
    import androidx.hilt.navigation.compose.hiltViewModel
    import androidx.lifecycle.viewmodel.compose.viewModel
    import androidx.navigation.compose.NavHost
    import androidx.navigation.compose.composable
    import androidx.navigation.compose.rememberNavController
    import androidx.navigation.navArgument
    import com.example.match.ui.home.HomePage
    import androidx.compose.runtime.collectAsState
    import androidx.compose.runtime.getValue
    import com.example.match.ui.home.HomeViewModel
    import com.example.match.ui.matchdetail.MatchDetailScreen
    
    @Composable
    fun AppNavHost() {
        val navController = rememberNavController()
    
    
        NavHost(
            navController = navController,
            startDestination = "splash"
        ) {
            // Splash
            composable("splash") {
                SplashScreen(
                    onTimeout = {
                        navController.navigate("login") {
                            popUpTo("splash") { inclusive = true }
                        }
                    }
                )
            }
    
            // Login
            composable(
                route = "login",
                arguments = listOf(navArgument("fromApp") {
                    defaultValue = false
                })
            ) { backStackEntry ->
    
    
                val fromApp = backStackEntry.arguments?.getBoolean("fromApp") ?: false
    
    
                val sessionViewModel: SessionViewModel = viewModel()
                val loginViewModel: LoginViewModel = viewModel()
    
    
                (if (!fromApp) {
                    {
    
                        sessionViewModel.setLoggedIn(false)
                        navController.navigate("home") { popUpTo("login") { inclusive = true } }
                    }
                } else null)?.let {
                    LoginScreen(
                        loginViewModel = loginViewModel,
                        onSkip = it,
                        onLoginSuccess = {
    
                            sessionViewModel.setLoggedIn(true)
                            navController.navigate("home") { popUpTo("login") { inclusive = true } }
                        },
                        onRegisterClicked = { navController.navigate("register") },
                        onForgotPassword = { },
                        onClose = if (fromApp) {
    
                            { navController.popBackStack() }
                        } else null
                    )
                }
            }
    
            composable("register") {
                RegisterScreen(
                    onRegisterSuccess = { successMsg ->
                        navController.navigate("home") {
                            popUpTo("register") { inclusive = true }
                        }
                    },
                    onAlreadyHaveAccount = { navController.navigate("login") }
                )
            }
    
            // Home
            composable("home") {
                val viewModel: HomeViewModel = hiltViewModel()
                val liveScores by viewModel.todayLiveScores.collectAsState()
                val upcomingMatches by viewModel.upcomingMatches.collectAsState()
    
                HomePage(
                    liveScores = liveScores,
                    upcomingMatches = upcomingMatches,
                    currentTab = "home",
                    onNavigationClick = { destination -> navController.navigate(destination) },
                    navController = navController  // Pass navController here
                )
            }
    
    
            composable("matchDetail/{matchId}") { backStackEntry ->
                val matchId = backStackEntry.arguments?.getString("matchId") ?: ""
                val sessionViewModel: SessionViewModel = viewModel()
                val userId by sessionViewModel.userId.collectAsState()
    
                MatchDetailScreen(
                    matchId = matchId,
                    userId = userId,
                    onBackClick = { navController.popBackStack() },
                    onRequireLogin = {
                        navController.navigate("login?fromApp=true")
                    }
                )
            }
    
    
    
    
            composable("profile") {
                ProfileScreen(
                    onClose = { navController.navigate("home") }
                )
            }
    
            composable("settings") {
                SettingsScreen(
                    onClose = { navController.navigate("home") }
                )
            }
    
    
    
        }
    }
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Please register or to comment