fun MainScreen()

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 }
            )
        }
    }
}