diff --git a/app/src/main/java/ru/megboyzz/dnevnik/Utils.kt b/app/src/main/java/ru/megboyzz/dnevnik/Utils.kt index 48f9ee4..8596107 100644 --- a/app/src/main/java/ru/megboyzz/dnevnik/Utils.kt +++ b/app/src/main/java/ru/megboyzz/dnevnik/Utils.kt @@ -29,6 +29,8 @@ import com.kizitonwose.calendar.compose.weekcalendar.WeekCalendarLayoutInfo import com.kizitonwose.calendar.compose.weekcalendar.WeekCalendarState import com.kizitonwose.calendar.core.* import kotlinx.coroutines.flow.filterNotNull +import kotlinx.coroutines.launch +import ru.megboyzz.dnevnik.navigation.AppNavRoute import ru.megboyzz.dnevnik.navigation.BaseNavRote import ru.megboyzz.dnevnik.ui.theme.dark import java.time.DayOfWeek @@ -49,13 +51,18 @@ fun SpacerHeight(height: Dp) = Spacer(Modifier.height(height)) @Composable fun Int.AsImageVector() = ImageVector.vectorResource(this) -@Composable fun NavController.navigate(to: BaseNavRote){ - LaunchedEffect(Unit) { +/* + LaunchedEffect(Unit){ navigate(to.route) { popUpTo(to.route) { inclusive = true } } + }*/ + + this.navigate(to.route){ + launchSingleTop = true } + } fun Modifier.drawColoredShadow( diff --git a/app/src/main/java/ru/megboyzz/dnevnik/navigation/MarksSubScreenNavHost.kt b/app/src/main/java/ru/megboyzz/dnevnik/navigation/MarksSubScreenNavHost.kt index 11bd886..9384e2c 100644 --- a/app/src/main/java/ru/megboyzz/dnevnik/navigation/MarksSubScreenNavHost.kt +++ b/app/src/main/java/ru/megboyzz/dnevnik/navigation/MarksSubScreenNavHost.kt @@ -2,12 +2,18 @@ package ru.megboyzz.dnevnik.navigation import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.navigation.NavGraph +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavigatorProvider import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable +import androidx.navigation.createGraph import com.google.accompanist.navigation.animation.rememberAnimatedNavController import ru.megboyzz.dnevnik.AsString import ru.megboyzz.dnevnik.R @@ -63,20 +69,31 @@ fun MarksSubScreenNavHost() { remember { mutableStateOf(false) } ), ) - Column { - SubScreenNavBar(list = list, subScreenNavController = navController) - NavHost( - navController = navController, - startDestination = MarksNavRoute.LastMarks.route - ){ - composable(MarksNavRoute.LastMarks.route) { Text(MarksNavRoute.LastMarks.route) } - composable(MarksNavRoute.ByDaysMarks.route) { Text(MarksNavRoute.ByDaysMarks.route) } - composable(MarksNavRoute.StatsByMarks.route) { Text(MarksNavRoute.StatsByMarks.route) } - composable(MarksNavRoute.StatsBySubjects.route) { Text(MarksNavRoute.StatsBySubjects.route) } - composable(MarksNavRoute.ByTermsMarks.route) { Text(MarksNavRoute.ByTermsMarks.route) } - composable(MarksNavRoute.ByYearMarks.route) { Text(MarksNavRoute.ByYearMarks.route) } + //TODO - исправить костыль))) + // Костыль с перевернутым лайаутом: суть в том что NavHost создает NavGraph который использует + // SubScreenNavBar, но в колумне сначала идет SubScreenNavBar а потом NavHost, и где то из-за этого + // вылетает NPE, так как еще нет графа + LazyColumn( + reverseLayout = true + ){ + item { + NavHost( + navController = navController, + startDestination = MarksNavRoute.LastMarks.route + ) { + composable(MarksNavRoute.LastMarks.route) { Text(MarksNavRoute.LastMarks.route) } + composable(MarksNavRoute.ByDaysMarks.route) { Text(MarksNavRoute.ByDaysMarks.route) } + composable(MarksNavRoute.StatsByMarks.route) { Text(MarksNavRoute.StatsByMarks.route) } + composable(MarksNavRoute.StatsBySubjects.route) { Text(MarksNavRoute.StatsBySubjects.route) } + composable(MarksNavRoute.ByTermsMarks.route) { Text(MarksNavRoute.ByTermsMarks.route) } + composable(MarksNavRoute.ByYearMarks.route) { Text(MarksNavRoute.ByYearMarks.route) } + } + } + item { + SubScreenNavBar(list = list, subScreenNavController = navController) } } + } \ No newline at end of file diff --git a/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/main/BottomBar.kt b/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/main/BottomBar.kt index 14bfeec..afd5a09 100644 --- a/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/main/BottomBar.kt +++ b/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/main/BottomBar.kt @@ -1,4 +1,4 @@ -package ru.megboyzz.dnevnik.screens.ui +package ru.megboyzz.dnevnik.screens.ui.main import androidx.compose.foundation.Image import androidx.compose.foundation.background @@ -6,8 +6,6 @@ import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip @@ -25,25 +23,6 @@ import ru.megboyzz.dnevnik.R @Composable fun BottomBar(navController: NavController) { - //Box(Modifier.fillMaxWidth().height(90.dp).shadow(8.dp)) - - // УЖАСНЫЙ КОСТЫЛЬ ДЛЯ ПЕРЕХОДОВ С ПОМОЩЬЮ СТЕЙТОВ TODO - УБРАТЬ - val goToMarks = remember { mutableStateOf(false) } - val goToHw = remember { mutableStateOf(false) } - val goToSchedule = remember { mutableStateOf(false) } - - if(goToMarks.value){ - navController.navigate(AppNavRoute.Marks) - //goToMarks.value = false - } - if(goToHw.value){ - navController.navigate(AppNavRoute.HomeWorks) - //goToHw.value = false - } - if(goToSchedule.value){ - navController.navigate(AppNavRoute.Schedule) - //goToSchedule.value = false - } Box( modifier = Modifier @@ -68,16 +47,19 @@ fun BottomBar(navController: NavController) { ) { BottomNavButton( icon = R.drawable.ic_marks.AsPainter(), - text = R.string.title_marks.AsString() - ) { goToMarks.value = true } + text = R.string.title_marks.AsString(), + onClick = { navController.navigate(AppNavRoute.Marks) } + ) BottomNavButton( icon = R.drawable.ic_homework.AsPainter(), - text = R.string.title_hw.AsString() - ) { goToHw.value = true } + text = R.string.title_hw.AsString(), + onClick = { navController.navigate(AppNavRoute.HomeWorks) } + ) BottomNavButton( icon = R.drawable.ic_schedule.AsPainter(), - text = R.string.title_schedule.AsString() - ) { goToSchedule.value = true } + text = R.string.title_schedule.AsString(), + onClick = { navController.navigate(AppNavRoute.Schedule) } + ) } } } diff --git a/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/main/Drawer.kt b/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/main/Drawer.kt index 93c394a..ef8a9a4 100644 --- a/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/main/Drawer.kt +++ b/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/main/Drawer.kt @@ -37,25 +37,7 @@ fun DrawerContent( scaffoldState: ScaffoldState ) { - // УЖАСНЫЙ КОСТЫЛЬ ДЛЯ ПЕРЕХОДОВ С ПОМОЩЬЮ СТЕЙТОВ TODO - УБРАТЬ - val goToMarks = remember { mutableStateOf(false) } - val goToHw = remember { mutableStateOf(false) } - val goToSchedule = remember { mutableStateOf(false) } - val scope = rememberCoroutineScope() - if(goToMarks.value){ - navController.navigate(AppNavRoute.Marks) - scope.launch { scaffoldState.drawerState.close() } - } - if(goToHw.value){ - navController.navigate(AppNavRoute.HomeWorks) - scope.launch { scaffoldState.drawerState.close() } - } - if(goToSchedule.value){ - navController.navigate(AppNavRoute.Schedule) - scope.launch { scaffoldState.drawerState.close() } - } - Column( modifier = Modifier .width(260.dp) @@ -74,20 +56,36 @@ fun DrawerContent( ) { DrawerMainButton( icon = R.drawable.ic_marks.AsPainter(), - text = R.string.title_marks.AsString() - ) { goToMarks.value = true } + text = R.string.title_marks.AsString(), + onClick = { + navController.navigate(AppNavRoute.Marks) + scope.launch { scaffoldState.drawerState.close() } + } + ) DrawerMainButton( icon = R.drawable.ic_homework.AsPainter(), - text = R.string.title_hw.AsString() - ) { goToHw.value = true } + text = R.string.title_hw.AsString(), + onClick = { + navController.navigate(AppNavRoute.HomeWorks) + scope.launch { scaffoldState.drawerState.close() } + } + ) DrawerMainButton( icon = R.drawable.ic_schedule.AsPainter(), - text = R.string.title_schedule.AsString() - ) { goToSchedule.value = true } + text = R.string.title_schedule.AsString(), + onClick = { + navController.navigate(AppNavRoute.Schedule) + scope.launch { scaffoldState.drawerState.close() } + } + ) DrawerMainButton( icon = R.drawable.ic_settings.AsPainter(), - text = R.string.title_settings.AsString() - ) { /* TODO */ } + text = R.string.title_settings.AsString(), + onClick = { + navController.navigate(AppNavRoute.Settings) + scope.launch { scaffoldState.drawerState.close() } + } + ) } Spacer(Modifier.weight(1f)) Divider(color = white, thickness = 1.dp) @@ -156,4 +154,4 @@ fun DrawerMainButton( ) } } -} +} \ No newline at end of file diff --git a/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/main/Scaffolds.kt b/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/main/Scaffolds.kt index 7742a07..d94f8d1 100644 --- a/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/main/Scaffolds.kt +++ b/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/main/Scaffolds.kt @@ -9,14 +9,12 @@ import androidx.compose.material.* import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ArrowBack import androidx.compose.material.icons.filled.Menu -import androidx.compose.material.icons.filled.Settings import androidx.compose.runtime.Composable import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.vector.ImageVector -import androidx.compose.ui.graphics.vector.rememberVectorPainter import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.navigation.NavController @@ -24,7 +22,6 @@ import kotlinx.coroutines.launch import ru.megboyzz.dnevnik.AsPainter import ru.megboyzz.dnevnik.AsString import ru.megboyzz.dnevnik.SpacerWidth -import ru.megboyzz.dnevnik.screens.ui.BottomBar import ru.megboyzz.dnevnik.screens.ui.DrawerContent import ru.megboyzz.dnevnik.screens.ui.drawerShape import ru.megboyzz.dnevnik.ui.theme.mainBlue