in shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/screens/MainScreen.kt [74:119]
fun MainScreen(
onNavigate: (AppRoute) -> Unit,
service: ConferenceService = koinInject(),
) {
LaunchedEffect(Unit) {
service.completeOnboarding()
}
Column(
Modifier
.fillMaxSize()
.background(color = KotlinConfTheme.colors.mainBackground)
.windowInsetsPadding(WindowInsets.safeDrawing)
) {
var currentIndex by rememberSaveable { mutableIntStateOf(0) }
val saveableStateHolder: SaveableStateHolder = rememberSaveableStateHolder()
if (currentIndex > 0 && LocalFlags.current.enableBackOnMainScreens) {
NavigationBackHandler(
state = rememberNavigationEventState(NavigationEventInfo.None),
isBackEnabled = true,
onBackCompleted = { currentIndex = 0 },
)
}
AnimatedContent(
targetState = currentIndex,
modifier = Modifier
.fillMaxWidth()
.weight(1f),
transitionSpec = { NoContentTransition },
) { index ->
saveableStateHolder.SaveableStateProvider(index) {
MainScreenContent(bottomNavDestinations[index].route, onNavigate)
}
}
AnimatedVisibility(!isKeyboardOpen(), enter = fadeIn(snap()), exit = fadeOut(snap())) {
BottomNavigation(
currentIndex = currentIndex,
onSelect = { selected -> currentIndex = selected }
)
}
}
}