Fix back navigation in Compose implementation

Back navigation was kept, so could navigate back to Splash, or Logged in state from Logged out.
This commit is contained in:
Gergely Hegedus 2022-04-14 18:00:50 +03:00
parent ce4e9eca09
commit 40e486ff7e

View file

@ -6,6 +6,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.testTag import androidx.compose.ui.platform.testTag
import androidx.navigation.NavOptions
import androidx.navigation.compose.NavHost import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController import androidx.navigation.compose.rememberNavController
@ -24,34 +25,53 @@ fun AppNavigation(isUserLogeInUseCase: IsUserLoggedInUseCase = get()) {
LaunchedEffect(isUserLogeInUseCase) { LaunchedEffect(isUserLogeInUseCase) {
delay(500) delay(500)
navController.navigate(if (isUserLogeInUseCase.invoke()) "Home" else "Auth") navController.navigate(
route = if (isUserLogeInUseCase.invoke()) RouteTag.HOME else RouteTag.AUTH,
navOptions = NavOptions.Builder().setPopUpTo(route = RouteTag.SPLASH, inclusive = true).build()
)
} }
NavHost( NavHost(
navController, navController,
startDestination = "Splash", startDestination = RouteTag.SPLASH,
modifier = Modifier.background(MaterialTheme.colors.surface) modifier = Modifier.background(MaterialTheme.colors.surface)
) { ) {
composable("Splash") { SplashScreen() } composable(RouteTag.SPLASH) { SplashScreen() }
composable("Auth") { composable(RouteTag.AUTH) {
AuthScreen( AuthScreen(
modifier = Modifier.testTag(AppNavigationTag.AuthScreen), modifier = Modifier.testTag(AppNavigationTag.AuthScreen),
authScreenState = rememberAuthScreenState( authScreenState = rememberAuthScreenState(
onLoginSuccess = { navController.navigate("Home") } onLoginSuccess = {
navController.navigate(
route = RouteTag.HOME,
navOptions = NavOptions.Builder().setPopUpTo(route = RouteTag.AUTH, inclusive = true).build()
)
}
) )
) )
} }
composable("Home") { composable(RouteTag.HOME) {
HomeScreen( HomeScreen(
modifier = Modifier.testTag(AppNavigationTag.HomeScreen), modifier = Modifier.testTag(AppNavigationTag.HomeScreen),
homeScreenState = rememberHomeScreenState( homeScreenState = rememberHomeScreenState(
onLogout = { navController.navigate("Auth") } onLogout = {
navController.navigate(
route = RouteTag.AUTH,
navOptions = NavOptions.Builder().setPopUpTo(route = RouteTag.HOME, inclusive = true).build()
)
}
) )
) )
} }
} }
} }
object RouteTag {
const val HOME = "Home"
const val AUTH = "Auth"
const val SPLASH = "Splash"
}
object AppNavigationTag { object AppNavigationTag {
const val AuthScreen = "AppNavigationTag.AuthScreen" const val AuthScreen = "AppNavigationTag.AuthScreen"
const val HomeScreen = "AppNavigationTag.HomeScreen" const val HomeScreen = "AppNavigationTag.HomeScreen"