Skip to content

Instantly share code, notes, and snippets.

@stdpmk
Created March 30, 2022 12:09
Show Gist options
  • Select an option

  • Save stdpmk/028b2e5d2644615961aaa6970f886a32 to your computer and use it in GitHub Desktop.

Select an option

Save stdpmk/028b2e5d2644615961aaa6970f886a32 to your computer and use it in GitHub Desktop.
sample navigate to compose screen by event from another screen
Граф
@Composable
fun JpcMainNavGraph(
modifier: Modifier = Modifier,
navController: NavHostController = rememberNavController(),
startDestination: String = Screen.SplashScreen.route
) {
NavHost(
navController = navController,
startDestination = startDestination,
modifier = modifier
) {
composable(Screen.SplashScreen.route) {
val viewModel: SplashScreenViewModel = viewModel(
factory = SplashScreenViewModel.provideFactory(LocalContext.current)
)
JpcSplashScreen(navController = navController, viewModel = viewModel)
}
composable(Screen.DialogLoginMain.route) {
JpcLogInMainScreen(navController = navController)
}
dialog(Screen.DialogLogin.route) {
JpcLogInDialog()
}
}
}
@Composable
fun JpcSplashScreen(
navController: NavHostController,
viewModel: SplashScreenViewModel
) {
JpcSplashScreen(
navController = navController,
state = viewModel.state
)
}
@Composable
fun JpcSplashScreen(
navController: NavHostController = rememberNavController(),
state: SplashScreenState = SplashScreenState(),
) {
// по событию из viewModel говорю - покажи новый экран Логина и "закрой" этот данный экран
if (state.showLoginDialog) {
LaunchedEffect(key1 = state.showLoginDialog) {
navController.navigate(Screen.DialogLoginMain.route)
}
return
}
// описание данного экрана
Box(
contentAlignment = Alignment.TopCenter,
modifier = Modifier
.fillMaxSize()
.background(color = ScreenBackgroundColor)
) {}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment