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