add bottom navigation

This commit is contained in:
Owen LeJeune
2022-02-09 16:13:20 -05:00
parent a9e916abb9
commit db37c06ae3
11 changed files with 208 additions and 15 deletions

View File

@@ -3,11 +3,19 @@ package com.owenlejeune.tvtime
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.Surface
import androidx.compose.material.Scaffold
import androidx.compose.material3.*
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.runtime.getValue
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.navigation.NavController
import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import com.owenlejeune.tvtime.ui.components.*
import com.owenlejeune.tvtime.ui.theme.TVTimeTheme
class MainActivity : ComponentActivity() {
@@ -22,10 +30,56 @@ class MainActivity : ComponentActivity() {
@Composable
fun MyApp() {
TVTimeTheme {
Surface(
modifier = Modifier.fillMaxSize()
val navController = rememberNavController()
Scaffold(
backgroundColor = MaterialTheme.colorScheme.background,
bottomBar = { Navbar(navController) }
) {
NavigationRoutes(navController = navController)
}
}
}
@Composable
private fun Navbar(navController: NavController) {
val navBackStackEntry by navController.currentBackStackEntryAsState()
val currentRoute = navBackStackEntry?.destination?.route
NavigationBar {
NavItems.Items.forEachIndexed { index, item ->
NavigationBarItem(
icon = { Icon(painter = painterResource(id = item.icon), contentDescription = null) },
label = { Text(item.name) },
selected = currentRoute == item.route,
onClick = {
navController.navigate(item.route) {
navController.graph.startDestinationRoute?.let { screenRoute ->
popUpTo(screenRoute) {
saveState = true
}
}
launchSingleTop = true
restoreState = true
}
}
)
}
}
}
@Composable
private fun NavigationRoutes(navController: NavHostController) {
NavHost(navController = navController, startDestination = NavItems.Movies.route) {
composable(NavItems.Movies.route) {
MoviesTab()
}
composable(NavItems.TV.route) {
TvTab()
}
composable(NavItems.Favourites.route) {
FavouritesTab()
}
composable(NavItems.Settings.route) {
SettingsTab()
}
}
}