Mohamed Eid
Mohamed Eid

Reputation: 1

why when i navigate from profile screen to login screen, the app navigate to home screen

i build an compose application and i want to logout and navigate to login screen but app navigate to home screen, i use bottom navigation bar and nested navigation.

this is the button that will logout:

@Composable
fun ProfileContent(rootNavController: NavController) {
    val authViewModel: AuthViewModel = viewModel()
    //sign out
    Button(
        modifier = Modifier
            .fillMaxWidth()
            .wrapContentWidth(Alignment.CenterHorizontally),
        onClick = {
        authViewModel.signOut()
        rootNavController.navigate("login"){
            popUpTo("profile"){ inclusive = true }
        }
    }) {
        Text(text = "Sign Out")
    }
}

this the routes:

object Graph {
    const val RootGraph = "root_graph"
    const val HomeGraph = "home_graph"
    const val AuthGraph = "auth_graph"
}

sealed class AuthRouteScreen(val route: String) {
    data object Login : AuthRouteScreen("login")
    data object SignUp : AuthRouteScreen("signUp")
    data object Forgot : AuthRouteScreen("forgot")
}

sealed class HomeRoutesScreen(val route: String) {
    data object Home : HomeRoutesScreen("home")
    data object Scan : HomeRoutesScreen("scan")
    data object Chat : HomeRoutesScreen("chat")
    data object History : HomeRoutesScreen("history")
    data object Profile : HomeRoutesScreen("profile")
}

this is the root nav:

@Composable
fun RootNavigationGraph() {
    val viewModel = ViewModelProvider(LocalContext.current as ViewModelStoreOwner)[AuthViewModel::class.java]
    val rootNavController = rememberNavController()
    NavHost(
        navController = rootNavController,
        route = Graph.RootGraph,
        startDestination = Graph.AuthGraph
    ) {
        authNavGraph(rootNavController = rootNavController, viewModel = viewModel)
        composable(route = Graph.HomeGraph) {
            HomeScreen(rootNavController = rootNavController)
        }
    }
}

this is the Auth nav:

package com.example.cardiolink.graphs

import androidx.navigation.NavGraphBuilder
import androidx.navigation.NavHostController
import androidx.navigation.compose.composable
import androidx.navigation.navigation
import com.example.cardiolink.viewModels.AuthViewModel
import com.example.cardiolink.views.ForgotPasswordScreen
import com.example.cardiolink.views.LoginScreen
import com.example.cardiolink.views.RegisterScreen
import com.example.cardiolink.views.SplashScreen

fun NavGraphBuilder.authNavGraph(rootNavController: NavHostController, viewModel: AuthViewModel) {
    navigation(
        route = Graph.AuthGraph,
        startDestination = AuthScreen.SPLASH.route
    ) {

        composable(route = AuthScreen.SPLASH.route) {
            SplashScreen(navController = rootNavController)
        }

        composable(route = AuthScreen.Login.route) {
            LoginScreen(navController = rootNavController, viewModel)
        }
        composable(route = AuthScreen.SignUp.route) {
            RegisterScreen(navController = rootNavController, viewModel)
        }
        composable(route = AuthScreen.Forgot.route) {
            ForgotPasswordScreen(navController = rootNavController)
        }
    }
}

sealed class AuthScreen(val route: String) {
    data object SPLASH : AuthScreen(route = "SPLASH")
    data object Login : AuthScreen(route = "LOGIN")
    data object SignUp : AuthScreen(route = "SIGN_UP")
    data object Forgot : AuthScreen(route = "FORGOT")
}

this is the Home Nav:

@Composable
fun HomeNavGraph(
    rootNavController: NavHostController,
    homeNavController: NavHostController
) {
    NavHost(
        navController = homeNavController,
        route = Graph.HomeGraph,
        startDestination = Utils.Home.route
    ) {
        composable(route = Utils.Home.route) {
            HomeContent()
        }
        composable(route = Utils.Scan.route) {
            ScanContent()
        }
        composable(route = Utils.Info.route) {
            InfoContent()
        }
        composable(route = Utils.History.route) {
            HistoryContent()
        }
        composable(route = Utils.Profile.route) {
            ProfileContent(rootNavController = rootNavController)
        }
    }
}

i am tried to use nested navigation but didn't work and also sue separate navigation but also didn't work

Upvotes: 0

Views: 24

Answers (0)

Related Questions