added main app composable with navgraph
This commit is contained in:
parent
10202fa693
commit
11d3d5c5d2
1 changed files with 81 additions and 0 deletions
81
app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt
Normal file
81
app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
package be.ugent.sel.studeez
|
||||||
|
|
||||||
|
import android.content.res.Resources
|
||||||
|
import androidx.compose.foundation.layout.padding
|
||||||
|
import androidx.compose.material.*
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.ReadOnlyComposable
|
||||||
|
import androidx.compose.runtime.remember
|
||||||
|
import androidx.compose.runtime.rememberCoroutineScope
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.platform.LocalConfiguration
|
||||||
|
import androidx.compose.ui.platform.LocalContext
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
|
import androidx.navigation.NavGraphBuilder
|
||||||
|
import androidx.navigation.NavHostController
|
||||||
|
import androidx.navigation.compose.NavHost
|
||||||
|
import androidx.navigation.compose.composable
|
||||||
|
import androidx.navigation.compose.rememberNavController
|
||||||
|
import be.ugent.sel.studeez.common.snackbar.SnackbarManager
|
||||||
|
import be.ugent.sel.studeez.navigation.StudeezDestinations
|
||||||
|
import be.ugent.sel.studeez.screens.splash.SplashScreen
|
||||||
|
import be.ugent.sel.studeez.ui.theme.StudeezTheme
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun StudeezApp() {
|
||||||
|
StudeezTheme {
|
||||||
|
Surface(color = MaterialTheme.colors.background) {
|
||||||
|
val appState = rememberAppState()
|
||||||
|
|
||||||
|
Scaffold(
|
||||||
|
snackbarHost = {
|
||||||
|
SnackbarHost(
|
||||||
|
hostState = it,
|
||||||
|
modifier = Modifier.padding(8.dp),
|
||||||
|
snackbar = { snackbarData ->
|
||||||
|
Snackbar(snackbarData, contentColor = MaterialTheme.colors.onPrimary)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
},
|
||||||
|
scaffoldState = appState.scaffoldState
|
||||||
|
) { innerPaddingModifier ->
|
||||||
|
NavHost(
|
||||||
|
navController = appState.navController,
|
||||||
|
startDestination = StudeezDestinations.SPLASH_SCREEN,
|
||||||
|
modifier = Modifier.padding(innerPaddingModifier)
|
||||||
|
) {
|
||||||
|
studeezGraph(appState)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun rememberAppState(
|
||||||
|
scaffoldState: ScaffoldState = rememberScaffoldState(),
|
||||||
|
navController: NavHostController = rememberNavController(),
|
||||||
|
snackbarManager: SnackbarManager = SnackbarManager,
|
||||||
|
resources: Resources = resources(),
|
||||||
|
coroutineScope: CoroutineScope = rememberCoroutineScope()
|
||||||
|
) =
|
||||||
|
remember(scaffoldState, navController, snackbarManager, resources, coroutineScope) {
|
||||||
|
StudeezAppstate(scaffoldState, navController, snackbarManager, resources, coroutineScope)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
@ReadOnlyComposable
|
||||||
|
fun resources(): Resources {
|
||||||
|
LocalConfiguration.current
|
||||||
|
return LocalContext.current.resources
|
||||||
|
}
|
||||||
|
|
||||||
|
fun NavGraphBuilder.studeezGraph(appState: StudeezAppstate) {
|
||||||
|
|
||||||
|
composable(StudeezDestinations.SPLASH_SCREEN) {
|
||||||
|
SplashScreen(openAndPopUp = { route, popUp -> appState.navigateAndPopUp(route, popUp) })
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
Reference in a new issue