簡體   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