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