diff --git a/app/src/main/java/com/approagency/drug/MainActivity.kt b/app/src/main/java/com/approagency/drug/MainActivity.kt index b00af0d..5f7f9c7 100644 --- a/app/src/main/java/com/approagency/drug/MainActivity.kt +++ b/app/src/main/java/com/approagency/drug/MainActivity.kt @@ -36,9 +36,7 @@ class MainActivity : ComponentActivity() { enableEdgeToEdge() setContent { DrugTheme { - val navController = rememberNavController() - val snackbarHostState = remember { SnackbarHostState() } - val scope = rememberCoroutineScope() + AppNavGraph( // navController = navController, // modifier = Modifier.padding(innerPadding) diff --git a/app/src/main/java/com/approagency/drug/navigation/AppNavGraph.kt b/app/src/main/java/com/approagency/drug/navigation/AppNavGraph.kt index 2839b4b..0a93b7e 100644 --- a/app/src/main/java/com/approagency/drug/navigation/AppNavGraph.kt +++ b/app/src/main/java/com/approagency/drug/navigation/AppNavGraph.kt @@ -1,9 +1,18 @@ package com.approagency.drug.navigation +import android.net.Uri import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.navigation.NavType import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable +import androidx.navigation.compose.navigation import androidx.navigation.compose.rememberNavController +import androidx.navigation.navArgument +import com.approagency.drug.presentation.screens.DrugDetailScreen +import com.approagency.drug.presentation.screens.HomeScreen +import com.approagency.drug.presentation.screens.LabScreen +import com.approagency.drug.presentation.screens.SearchScreen @Composable fun AppNavGraph() { @@ -12,12 +21,51 @@ fun AppNavGraph() { NavHost( navController = navController, - startDestination = "main_container" + startDestination = "home" ) { - composable("main_container") { + // ─────────────── + // BOTTOM TABS + // ─────────────── - MainContainer() + composable("home") { + MainContainer(navController) { + HomeScreen(navController , modifier = Modifier) + } + } + + composable("search") { + MainContainer(navController) { + SearchScreen(navController) + } + } + + composable("lab") { + MainContainer(navController) { + LabScreen() + } + } + + // ─────────────── + // GLOBAL SCREEN + // ─────────────── + + composable( + route = Screen.DrugDetail.route, + arguments = listOf( + navArgument("detailUrl") { + type = NavType.StringType + } + ) + ) { + + val detailUrl = + Uri.decode(it.arguments?.getString("detailUrl") ?: "") + + DrugDetailScreen( + navController = navController, + detailUrl = detailUrl + ) } } } \ No newline at end of file diff --git a/app/src/main/java/com/approagency/drug/navigation/BottomBar.kt b/app/src/main/java/com/approagency/drug/navigation/BottomBar.kt index f0b012f..c9821d6 100644 --- a/app/src/main/java/com/approagency/drug/navigation/BottomBar.kt +++ b/app/src/main/java/com/approagency/drug/navigation/BottomBar.kt @@ -39,62 +39,56 @@ import androidx.navigation.NavHostController import androidx.navigation.compose.currentBackStackEntryAsState @Composable -fun BottomBar( - navController: NavHostController -) { +fun BottomBar(navController: NavHostController) { + val items = listOf( - Triple(MainRoute.HomeGraph, "دارو", Icons.Default.Search), - Triple(MainRoute.SearchGraph, "سرچ", Icons.Rounded.Refresh), - Triple(MainRoute.LabGraph, "آزمایش", Icons.Default.Build) + Triple("home", "دارو", Icons.Default.Search), + Triple("search", "سرچ", Icons.Rounded.Refresh), + Triple("lab", "آزمایش", Icons.Default.Build) ) val navBackStackEntry by navController.currentBackStackEntryAsState() - val currentDestination = navBackStackEntry?.destination + val currentRoute = navBackStackEntry?.destination?.route + Surface( tonalElevation = 2.dp, - color = MaterialTheme.colorScheme.surface, modifier = Modifier .navigationBarsPadding() - .height(50.dp) + .height(56.dp) ) { - Row( - modifier = Modifier.fillMaxSize(), - verticalAlignment = Alignment.CenterVertically - ) { + Row(modifier = Modifier.fillMaxSize(), + verticalAlignment = Alignment.CenterVertically) { items.forEach { item -> - val selected = currentDestination - ?.hierarchy - ?.any { it.route == item.first.route } == true + 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) + .weight(1f).padding(horizontal = 8.dp , vertical = 4.dp) .clip(MaterialTheme.shapes.large) .background(background) .clickable { - navController.navigate(item.first.route) { - popUpTo(navController.graph.findStartDestination().id) { - saveState = true + if (!selected) { + navController.navigate(item.first) { + popUpTo("home") { + saveState = true + } + launchSingleTop = true + restoreState = true } - launchSingleTop = true - restoreState = true } - } - .padding(horizontal = 10.dp, vertical = 10.dp), - contentAlignment = Alignment.Center + }.padding(horizontal = 10.dp, vertical = 10.dp), + + contentAlignment = Alignment.Center ) { Row( diff --git a/app/src/main/java/com/approagency/drug/navigation/MainContainer.kt b/app/src/main/java/com/approagency/drug/navigation/MainContainer.kt index 9a2fc02..6d939a3 100644 --- a/app/src/main/java/com/approagency/drug/navigation/MainContainer.kt +++ b/app/src/main/java/com/approagency/drug/navigation/MainContainer.kt @@ -1,51 +1,28 @@ package com.approagency.drug.navigation +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.padding import androidx.compose.material3.Scaffold import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier +import androidx.navigation.NavHostController import androidx.navigation.compose.NavHost import androidx.navigation.compose.currentBackStackEntryAsState -import androidx.navigation.compose.rememberNavController -import com.approagency.drug.navigation.graphs.homeGraph -import com.approagency.drug.navigation.graphs.labGraph -import com.approagency.drug.navigation.graphs.searchGraph - @Composable -fun MainContainer() { +fun MainContainer( + navController: NavHostController, + content: @Composable () -> Unit +) { - val navController = rememberNavController() - val navBackStackEntry by navController.currentBackStackEntryAsState() - - val currentRoute = navBackStackEntry?.destination?.route - - val showBottomBar = when (currentRoute) { - Screen.Home.route, - Screen.Search.route, - Screen.Lab.route -> true - else -> false - } Scaffold( bottomBar = { - if (showBottomBar) { BottomBar(navController) - } } ) { padding -> - NavHost( - navController = navController, - startDestination = MainRoute.HomeGraph.route, - modifier =if (showBottomBar ) Modifier.padding(padding) else Modifier - - ) { - - homeGraph(navController) - - searchGraph(navController) - - labGraph(navController) + Box(modifier = Modifier.padding(padding)) { + content() } } } \ No newline at end of file diff --git a/app/src/main/java/com/approagency/drug/navigation/graphs/HomeGraph.kt b/app/src/main/java/com/approagency/drug/navigation/graphs/HomeGraph.kt index fac7490..2d704f0 100644 --- a/app/src/main/java/com/approagency/drug/navigation/graphs/HomeGraph.kt +++ b/app/src/main/java/com/approagency/drug/navigation/graphs/HomeGraph.kt @@ -1,28 +1,19 @@ -package com.approagency.drug.navigation.graphs - -import androidx.compose.ui.Modifier -import androidx.navigation.NavGraphBuilder -import androidx.navigation.NavHostController -import androidx.navigation.compose.composable -import androidx.navigation.navigation -import com.approagency.drug.navigation.MainRoute -import com.approagency.drug.navigation.Screen -import com.approagency.drug.presentation.screens.HomeScreen - -fun NavGraphBuilder.homeGraph( - navController: NavHostController -) { - - navigation( - route = MainRoute.HomeGraph.route, - startDestination = Screen.Home.route - ) { - - composable(Screen.Home.route) { - - HomeScreen( - navController = navController , modifier = Modifier - ) - } - } -} \ No newline at end of file +//package com.approagency.drug.navigation.graphs +// +//import androidx.compose.ui.Modifier +//import androidx.navigation.NavGraphBuilder +//import androidx.navigation.NavHostController +//import androidx.navigation.compose.composable +//import androidx.navigation.navigation +//import com.approagency.drug.navigation.MainRoute +//import com.approagency.drug.navigation.Screen +//import com.approagency.drug.presentation.screens.HomeScreen +// +//fun NavGraphBuilder.homeGraph(navController: NavHostController) { +// +// composable(MainRoute.HomeGraph.route) { +// HomeScreen( +// navController = navController , modifier = Modifier +// ) +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/approagency/drug/navigation/graphs/LabGraph.kt b/app/src/main/java/com/approagency/drug/navigation/graphs/LabGraph.kt index 89b61f0..2075e0e 100644 --- a/app/src/main/java/com/approagency/drug/navigation/graphs/LabGraph.kt +++ b/app/src/main/java/com/approagency/drug/navigation/graphs/LabGraph.kt @@ -1,25 +1,16 @@ -package com.approagency.drug.navigation.graphs - -import androidx.navigation.NavGraphBuilder -import androidx.navigation.NavHostController -import androidx.navigation.compose.composable -import androidx.navigation.navigation -import com.approagency.drug.navigation.MainRoute -import com.approagency.drug.navigation.Screen -import com.approagency.drug.presentation.screens.LabScreen - -fun NavGraphBuilder.labGraph( - navController: NavHostController -) { - - navigation( - route = MainRoute.LabGraph.route, - startDestination = Screen.Lab.route - ) { - - composable(Screen.Lab.route) { - - LabScreen() - } - } -} \ No newline at end of file +//package com.approagency.drug.navigation.graphs +// +//import androidx.navigation.NavGraphBuilder +//import androidx.navigation.NavHostController +//import androidx.navigation.compose.composable +//import androidx.navigation.navigation +//import com.approagency.drug.navigation.MainRoute +//import com.approagency.drug.navigation.Screen +//import com.approagency.drug.presentation.screens.LabScreen +// +//fun NavGraphBuilder.labGraph(navController: NavHostController) { +// +// composable(MainRoute.LabGraph.route) { +// LabScreen() +// } +//} \ No newline at end of file diff --git a/app/src/main/java/com/approagency/drug/navigation/graphs/SearchGraph.kt b/app/src/main/java/com/approagency/drug/navigation/graphs/SearchGraph.kt index 0a259b1..e2cbb2d 100644 --- a/app/src/main/java/com/approagency/drug/navigation/graphs/SearchGraph.kt +++ b/app/src/main/java/com/approagency/drug/navigation/graphs/SearchGraph.kt @@ -1,51 +1,20 @@ -package com.approagency.drug.navigation.graphs - -import android.net.Uri -import androidx.navigation.NavGraphBuilder -import androidx.navigation.NavHostController -import androidx.navigation.NavType -import androidx.navigation.compose.composable -import androidx.navigation.navArgument -import androidx.navigation.navigation -import com.approagency.drug.navigation.MainRoute -import com.approagency.drug.navigation.Screen -import com.approagency.drug.presentation.screens.DrugDetailScreen -import com.approagency.drug.presentation.screens.SearchScreen - -fun NavGraphBuilder.searchGraph( - navController: NavHostController -) { - - navigation( - route = MainRoute.SearchGraph.route, - startDestination = Screen.Search.route - ) { - - composable(Screen.Search.route) { - - SearchScreen( - navController = navController - ) - } - - composable( - route = Screen.DrugDetail.route, - arguments = listOf( - navArgument("detailUrl") { - type = NavType.StringType - } - ) - ) { - - val detailUrl = - Uri.decode( - it.arguments?.getString("detailUrl") ?: "" - ) - - DrugDetailScreen( - navController = navController, - detailUrl = detailUrl - ) - } - } -} \ No newline at end of file +//package com.approagency.drug.navigation.graphs +// +//import android.net.Uri +//import androidx.navigation.NavGraphBuilder +//import androidx.navigation.NavHostController +//import androidx.navigation.NavType +//import androidx.navigation.compose.composable +//import androidx.navigation.navArgument +//import androidx.navigation.navigation +//import com.approagency.drug.navigation.MainRoute +//import com.approagency.drug.navigation.Screen +//import com.approagency.drug.presentation.screens.DrugDetailScreen +//import com.approagency.drug.presentation.screens.SearchScreen +// +//fun NavGraphBuilder.searchGraph(navController: NavHostController) { +// +// composable(MainRoute.SearchGraph.route) { +// SearchScreen(navController) +// } +//} \ No newline at end of file