mirror of
https://github.com/owenlejeune/TVTime.git
synced 2025-11-22 11:40:54 -05:00
add bottom navigation
This commit is contained in:
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user