Как только пользователь успешно входит в систему, я перехожу на главный экран и использую DataStore, чтобы сохранить успешный вход в систему.< /p>
Конечно, после закрытия приложения отображается экран входа в систему, так как это startDestination в моем NavHost, но я хочу каким-то образом проверить, входил ли пользователь в систему ранее, и если да, перейти напрямую на главный экран.
Я пробовал в методе onCreate получить сохраненное состояние входа из DataStore и изменить на основе этого параметр startDestination, но, поскольку это состояние, для него требуется значение по умолчанию. Указав значение по умолчанию для isLoggedIn, первое эмитированное значение приведет к мгновенному отображению экрана входа в систему, а затем переходу к главному экрану.
Код: Выделить всё
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val appViewModel by inject()
//Default value to false
// (set to true happends the same, first home screen then navigates to login screen)
var isLoggedIn: Boolean by mutableStateOf(false)
lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.STARTED) {
appViewModel.isLoggedIn.collect {
isLoggedIn = it
}
}
}
/*Collect appViewModel.isLoggedIn, which is a flow of preference from DataStore,
containing a boolean indicating if the user has successfully logged in before*/
setContent {
PrimeTheme {
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.secondary
) { // Here I call the Navhost with different startDestination based on isLoggedIn parameter
RootView(isLoggedIn)
}
}
}
}
Есть ли лучший способ сделать это?
Спасибо
Подробнее здесь: https://stackoverflow.com/questions/789 ... -logged-in
Мобильная версия