init
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
package cc.n0th1ng.tripmoney.navigation
|
||||
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.filled.List
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.NavigationBar
|
||||
import androidx.compose.material3.NavigationBarItem
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.navigation.NavController
|
||||
import androidx.navigation.compose.currentBackStackEntryAsState
|
||||
import com.composables.icons.materialsymbols.outlined.R
|
||||
|
||||
@Composable
|
||||
fun BottomNavigation(navController: NavController) {
|
||||
val navBackStack by navController.currentBackStackEntryAsState()
|
||||
val current = navBackStack?.destination?.route
|
||||
|
||||
NavigationBar {
|
||||
NavigationBarItem(
|
||||
selected = current?.contains(Screens.TRIP_PICKER) == true,
|
||||
onClick = { navController.navigate(Screens.TRIP_PICKER) },
|
||||
icon = {
|
||||
Icon(
|
||||
painter = painterResource(
|
||||
R.drawable.materialsymbols_ic_luggage_outlined
|
||||
), "trip picker"
|
||||
)
|
||||
}
|
||||
)
|
||||
NavigationBarItem(
|
||||
selected = current?.contains(Screens.LIST_EXPENSE) == true,
|
||||
onClick = { navController.navigate(Screens.LIST_EXPENSE) },
|
||||
icon = {
|
||||
Icon(
|
||||
painter = painterResource(
|
||||
R.drawable.materialsymbols_ic_list_outlined,
|
||||
),
|
||||
null
|
||||
)
|
||||
}
|
||||
)
|
||||
|
||||
NavigationBarItem(
|
||||
selected = current?.contains(Screens.STATISTICS) == true,
|
||||
onClick = { navController.navigate(Screens.STATISTICS) },
|
||||
icon = {
|
||||
Icon(
|
||||
painter = painterResource(
|
||||
R.drawable.materialsymbols_ic_pie_chart_outlined,
|
||||
),
|
||||
null
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,102 @@
|
||||
package cc.n0th1ng.tripmoney.navigation
|
||||
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Home
|
||||
import androidx.compose.material.icons.filled.Settings
|
||||
import androidx.compose.material3.DrawerState
|
||||
import androidx.compose.material3.HorizontalDivider
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.ModalDrawerSheet
|
||||
import androidx.compose.material3.ModalNavigationDrawer
|
||||
import androidx.compose.material3.NavigationDrawerItem
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.rememberCoroutineScope
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.navigation.NavController
|
||||
import com.composables.icons.materialsymbols.outlined.R
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@Composable
|
||||
fun CustomNavigationDrawer(
|
||||
navController: NavController, drawerState: DrawerState, content: @Composable () -> Unit
|
||||
) {
|
||||
val scope = rememberCoroutineScope()
|
||||
ModalNavigationDrawer(
|
||||
drawerState = drawerState, drawerContent = {
|
||||
ModalDrawerSheet {
|
||||
Text("Trip Money", modifier = Modifier.padding(16.dp))
|
||||
HorizontalDivider()
|
||||
NavigationDrawerItem(
|
||||
label = { Text(text = "Pick trip") },
|
||||
selected = false,
|
||||
onClick = {
|
||||
navController.navigate(Screens.TRIP_PICKER)
|
||||
scope.launch {
|
||||
drawerState.close()
|
||||
}
|
||||
},
|
||||
icon = {
|
||||
Icon(
|
||||
painter = painterResource(
|
||||
R.drawable.materialsymbols_ic_luggage_outlined,
|
||||
), null
|
||||
)
|
||||
})
|
||||
NavigationDrawerItem(
|
||||
label = { Text(text = "List of expenses") },
|
||||
selected = false,
|
||||
onClick = {
|
||||
navController.navigate(Screens.LIST_EXPENSE)
|
||||
scope.launch {
|
||||
drawerState.close()
|
||||
}
|
||||
},
|
||||
icon = {
|
||||
Icon(
|
||||
painter = painterResource(
|
||||
R.drawable.materialsymbols_ic_list_outlined,
|
||||
), null
|
||||
)
|
||||
})
|
||||
NavigationDrawerItem(
|
||||
label = { Text(text = "Statistics") },
|
||||
selected = false,
|
||||
onClick = {
|
||||
navController.navigate(Screens.STATISTICS)
|
||||
scope.launch {
|
||||
drawerState.close()
|
||||
}
|
||||
},
|
||||
icon = {
|
||||
Icon(
|
||||
painter = painterResource(
|
||||
R.drawable.materialsymbols_ic_pie_chart_outlined,
|
||||
), null
|
||||
)
|
||||
})
|
||||
NavigationDrawerItem(
|
||||
label = { Text(text = "Settings") },
|
||||
selected = false,
|
||||
onClick = {
|
||||
navController.navigate(Screens.SETTINGS)
|
||||
scope.launch {
|
||||
drawerState.close()
|
||||
}
|
||||
},
|
||||
icon = { Icon(Icons.Default.Settings, contentDescription = "settings") }
|
||||
)
|
||||
}
|
||||
}) { content() }
|
||||
}
|
||||
|
||||
object Screens {
|
||||
const val LIST_EXPENSE = "list_expense"
|
||||
const val TRIP_PICKER = "trip_picker"
|
||||
const val STATISTICS = "statistics"
|
||||
const val SETTINGS = "settings"
|
||||
}
|
||||
41
app/src/main/java/cc/n0th1ng/tripmoney/navigation/TopBar.kt
Normal file
41
app/src/main/java/cc/n0th1ng/tripmoney/navigation/TopBar.kt
Normal file
@@ -0,0 +1,41 @@
|
||||
package cc.n0th1ng.tripmoney.navigation
|
||||
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.filled.ArrowBack
|
||||
import androidx.compose.material.icons.filled.Menu
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TopAppBar
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.navigation.NavHostController
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun TopBar(onClick: () -> Unit) {
|
||||
TopAppBar(
|
||||
title = {},
|
||||
navigationIcon = {
|
||||
IconButton(onClick = { onClick() }) {
|
||||
Icon(Icons.Default.Menu, contentDescription = "Menu")
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun TopBarSettings(navController: NavHostController) {
|
||||
|
||||
TopAppBar(
|
||||
title = { Text("Settings") },
|
||||
navigationIcon = {
|
||||
IconButton(onClick = { navController.popBackStack() }) {
|
||||
Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = "Back")
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user