Skip to content

Instantly share code, notes, and snippets.

@walnashgit
Created May 6, 2021 09:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save walnashgit/82fc21a8a0e2e7230a8360d27f417daf to your computer and use it in GitHub Desktop.
Save walnashgit/82fc21a8a0e2e7230a8360d27f417daf to your computer and use it in GitHub Desktop.
@Composable
fun AppScaffold() {
val viewModel: MainViewModel = viewModel()
val navController = rememberNavController()
val scaffoldState = rememberScaffoldState()
val scope = rememberCoroutineScope()
val currentScreen by viewModel.currentScreen.observeAsState()
var topBar : @Composable () -> Unit = {
TopBar(
title = currentScreen!!.title,
buttonIcon = Icons.Filled.Menu,
onButtonClicked = {
scope.launch {
scaffoldState.drawerState.open()
}
}
)
}
if (currentScreen == Screens.DrawerScreens.Help) {
topBar = {
TopBar(
title = Screens.DrawerScreens.Help.title,
buttonIcon = Icons.Filled.ArrowBack,
onButtonClicked = {
navController.popBackStack()
}
)
}
}
val bottomBar: @Composable () -> Unit = {
if (currentScreen == Screens.DrawerScreens.Home || currentScreen is Screens.HomeScreens) {
BottomBar(
navController = navController,
screens = screensInHomeFromBottomNav
)
}
}
Scaffold(
topBar = {
topBar()
},
bottomBar = {
bottomBar()
},
scaffoldState = scaffoldState,
drawerContent = {
Drawer { screen ->
scope.launch {
scaffoldState.drawerState.close()
}
navController.navigate(screen.route) {
popUpTo = navController.graph.startDestination
launchSingleTop = true
}
}
},
drawerGesturesEnabled = scaffoldState.drawerState.isOpen,
) { innerPadding ->
NavigationHost(navController = navController, viewModel = viewModel)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment