109 lines
4.1 KiB
Kotlin
109 lines
4.1 KiB
Kotlin
package com.approagency.pharmacy.navigation
|
|
|
|
import androidx.compose.foundation.background
|
|
import androidx.compose.foundation.clickable
|
|
import androidx.compose.foundation.layout.Box
|
|
import androidx.compose.foundation.layout.Row
|
|
import androidx.compose.foundation.layout.Spacer
|
|
import androidx.compose.foundation.layout.fillMaxSize
|
|
import androidx.compose.foundation.layout.height
|
|
import androidx.compose.foundation.layout.navigationBarsPadding
|
|
import androidx.compose.foundation.layout.padding
|
|
import androidx.compose.foundation.layout.size
|
|
import androidx.compose.foundation.layout.width
|
|
import androidx.compose.material.icons.Icons
|
|
import androidx.compose.material.icons.filled.LocalPharmacy
|
|
import androidx.compose.material.icons.filled.Science
|
|
import androidx.compose.material.icons.filled.Search
|
|
import androidx.compose.material3.Icon
|
|
import androidx.compose.material3.MaterialTheme
|
|
import androidx.compose.material3.Surface
|
|
import androidx.compose.material3.Text
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.runtime.getValue
|
|
import androidx.compose.ui.Alignment
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.compose.ui.draw.clip
|
|
import androidx.compose.ui.graphics.Color
|
|
import androidx.compose.ui.unit.dp
|
|
import androidx.navigation.NavGraph.Companion.findStartDestination
|
|
import androidx.navigation.NavHostController
|
|
import androidx.navigation.compose.currentBackStackEntryAsState
|
|
|
|
@Composable
|
|
fun BottomBar(navController: NavHostController) {
|
|
|
|
val items = listOf(
|
|
Triple("home", "عمومی", Icons.Filled.LocalPharmacy),
|
|
Triple("search", "جستجو",Icons.Filled.Search),
|
|
Triple("lab", "آزمایش", Icons.Filled.Science)
|
|
)
|
|
|
|
val navBackStackEntry by navController.currentBackStackEntryAsState()
|
|
val currentRoute = navBackStackEntry?.destination?.route
|
|
|
|
Surface(
|
|
tonalElevation = 2.dp,
|
|
modifier = Modifier
|
|
.navigationBarsPadding()
|
|
.height(56.dp)
|
|
) {
|
|
Row(modifier = Modifier.fillMaxSize(),
|
|
verticalAlignment = Alignment.CenterVertically) {
|
|
|
|
items.forEach { item ->
|
|
|
|
val selected = currentRoute == item.first
|
|
|
|
val color = if (selected)
|
|
MaterialTheme.colorScheme.primary
|
|
else
|
|
MaterialTheme.colorScheme.onSurfaceVariant
|
|
val background = if (selected)
|
|
MaterialTheme.colorScheme.primary.copy(alpha = 0.12f)
|
|
else
|
|
Color.Transparent
|
|
Box(
|
|
modifier = Modifier
|
|
.weight(1f).padding(horizontal = 8.dp , vertical = 4.dp)
|
|
.clip(MaterialTheme.shapes.large)
|
|
.background(background)
|
|
.clickable {
|
|
if (!selected) {
|
|
navController.navigate(item.first) {
|
|
popUpTo(navController.graph.findStartDestination().id) {
|
|
saveState = true
|
|
}
|
|
launchSingleTop = true
|
|
restoreState = true
|
|
}
|
|
}
|
|
}.padding(horizontal = 10.dp, vertical = 10.dp),
|
|
|
|
contentAlignment = Alignment.Center
|
|
) {
|
|
|
|
Row(
|
|
verticalAlignment = Alignment.CenterVertically
|
|
) {
|
|
|
|
Icon(
|
|
imageVector = item.third,
|
|
contentDescription = item.second,
|
|
tint = color,
|
|
modifier = Modifier.size(22.dp)
|
|
)
|
|
|
|
Spacer(modifier = Modifier.width(6.dp))
|
|
|
|
Text(
|
|
text = item.second,
|
|
color = color,
|
|
style = MaterialTheme.typography.labelMedium
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |