繁体   English   中英

通过使用 jetpack compose 检查登录 state 进行导航(条件嵌套导航图)

[英]Navigate by checking login state with jetpack compose (Conditional Nested Nav graphs)

我正在尝试实现一种方法来检查房间数据库之前的身份验证状态并进行导航(条件导航)

要求如下

在此处输入图像描述

我有一个 session 管理器,代码如下

    private val _sessionState = MutableStateFlow(SessionState.Loading)
    val sessionState: StateFlow<SessionState> = _sessionState

    init {
        coroutineScope.launch {
            sessionRepo.getActiveSession()
                .collect { resource ->
                    _sessionState.value = when (resource) {
                        is Resource.Success -> {
                            if (resource.data == null) {
                                SessionState.InActive
                            } else {
                                SessionState.Active
                            }
                        }
                        else -> throw IllegalStateException("Failed to load session")
                    }
                }
        }
    }

如何使用 jetpack compose 进行检查

如果我正确理解您的问题,我会这样做:

@Composable
fun App(mainViewModel: MainViewModel) {
    val navController = rememberNavController()

    LaunchedEffect(Unit) {
        mainViewModel.checkAuth(navController)
    }
    
    NavHost(
        navController = navController,
        startDestination = RootNavigation.Home.route
    ) {
        
        composable(RootNavigation.Home.route) {
            SplashScreen()
        }

        loginGraph(navController)

        workspaceGraph(navController)
    }
}

在 MainViewModel:

fun checkAuth(navController: NavHostController) {
    viewModelScope.launch {
        ...//your code
        
        if (resource.data == null)                            
            navController.navigateAndReplaceStartRoute(RootNavigation.Login.route)
        else navController.navigateAndReplaceStartRoute(RootNavigation.Workspace.route)

        ...//your code
    }
}

我回答你的问题了吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM