11package team.aliens.dms.android.app
22
3+ import androidx.compose.foundation.layout.Box
4+ import androidx.compose.foundation.layout.fillMaxWidth
5+ import androidx.compose.foundation.layout.padding
6+ import androidx.compose.foundation.layout.statusBarsPadding
37import androidx.compose.foundation.layout.systemBarsPadding
8+ import androidx.compose.material3.SnackbarHost
49import androidx.compose.material3.Text
510import androidx.compose.material3.windowsizeclass.WindowSizeClass
611import androidx.compose.runtime.Composable
712import androidx.compose.runtime.LaunchedEffect
813import androidx.compose.runtime.collectAsState
914import androidx.compose.runtime.getValue
15+ import androidx.compose.ui.Alignment
1016import androidx.compose.ui.Modifier
17+ import androidx.compose.ui.unit.dp
18+ import androidx.compose.ui.zIndex
1119import androidx.navigation3.runtime.NavKey
1220import androidx.navigation3.runtime.entryProvider
1321import androidx.navigation3.runtime.rememberNavBackStack
1422import androidx.navigation3.ui.NavDisplay
1523import kotlinx.coroutines.flow.StateFlow
1624import kotlinx.serialization.Serializable
1725import team.aliens.dms.android.core.designsystem.DmsTheme
26+ import team.aliens.dms.android.core.designsystem.snackbar.DmsSnackBar
27+ import team.aliens.dms.android.core.designsystem.snackbar.DmsSnackBarVisuals
1828import team.aliens.dms.android.feature.onboarding.navigation.OnboardingRoute
1929import team.aliens.dms.android.feature.signin.navigation.SignInRoute
2030
@@ -32,6 +42,7 @@ fun DmsApp(
3242 windowSizeClass : WindowSizeClass ,
3343 isJwtAvailable : StateFlow <Boolean >,
3444 mainViewModel : MainActivityViewModel ,
45+ appState : DmsAppState = rememberDmsAppState(),
3546) {
3647 val isOnboardingCompleted by mainViewModel.isOnboardingCompleted.collectAsState()
3748 val isJwtAvailableState by isJwtAvailable.collectAsState()
@@ -51,28 +62,53 @@ fun DmsApp(
5162 }
5263 }
5364
54- NavDisplay (
55- modifier = Modifier .systemBarsPadding(),
56- backStack = backStack,
57- onBack = { backStack.removeLastOrNull() },
58- entryProvider = entryProvider {
59- entry<OnboardingScreenNav > {
60- OnboardingRoute (
61- navigateToSignIn = {
62- backStack.clear()
63- backStack.add(SignInScreenNav )
64- },
65+ Box (
66+ modifier = Modifier .fillMaxWidth(),
67+ ) {
68+ NavDisplay (
69+ modifier = Modifier .systemBarsPadding(),
70+ backStack = backStack,
71+ onBack = { backStack.removeLastOrNull() },
72+ entryProvider = entryProvider {
73+ entry<OnboardingScreenNav > {
74+ OnboardingRoute (
75+ navigateToSignIn = {
76+ backStack.clear()
77+ backStack.add(SignInScreenNav )
78+ },
79+ )
80+ }
81+ entry<SignInScreenNav > {
82+ SignInRoute (
83+ navigateToMain = { backStack.add(MainScreenNav ) },
84+ navigateToSignUp = {},
85+ onShowSnackBar = { snackBarType, message ->
86+ appState.showSnackBar(snackBarType, message)
87+ },
88+ )
89+ }
90+ entry<MainScreenNav > {
91+ Text (
92+ text = " Main Screen (TODO)" ,
93+ color = DmsTheme .colorScheme.onSurface,
94+ )
95+ }
96+ },
97+ )
98+ SnackbarHost (
99+ modifier = Modifier
100+ .align(Alignment .TopCenter )
101+ .statusBarsPadding()
102+ .padding(top = 16 .dp)
103+ .zIndex(2f ),
104+ hostState = appState.snackBarHostState,
105+ snackbar = {
106+ val visuals = it.visuals as ? DmsSnackBarVisuals ? : return @SnackbarHost
107+ DmsSnackBar (
108+ snackBarType = visuals.snackBarType,
109+ message = visuals.message,
65110 )
66- }
67- entry<SignInScreenNav > {
68- SignInRoute ()
69- }
70- entry<MainScreenNav > {
71- Text (
72- text = " Main Screen (TODO)" ,
73- color = DmsTheme .colorScheme.onSurface,
74- )
75- }
76- },
77- )
111+ },
112+ )
113+ }
78114}
0 commit comments