sealed
class
NavUiState (
val isToolbarVisible: Boolean,
val isBottombarVisible: Boolean
) {
object ToolbarBottombar: NavUiState(
true
,
true
)
object NoToolbarBottombar: NavUiState(
false
,
true
)
object NoToolbarNoBottombar: NavUiState(
false
,
false
)
}
sealed
class
NavDestination(
val navigationUiState: NavUiState,
val navId: Int,
val navArgs: Bundle? =
null
) {
object Login: NavDestination(...)
object Onboarding: NavDestination(...)
object Home: NavDestination(...)
}
class
NavManager(
private
val navController: NavController
private
val userManager: UserManager
) {
fun goTo(destination: NavDestination) {
when (userManager.userState) {
LOGGED_OUT,
NEVER_LOGGED_IN -> goToLogin()
ONBOARDING -> goToOnboarding()
else
-> navController.navigate(navId, navArgs)
}
}
fun goToLogin() {
goTo(Login)
}
fun goToOnboarding() {
goTo(Onboarding)
}
fun goHome() {
goTo(Home)
}
}