[英]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.