Исправлена навигация

This commit is contained in:
2023-04-07 15:58:35 +03:00
parent a8184914de
commit 7e8a6cf260
5 changed files with 73 additions and 72 deletions
@@ -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(
@@ -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)
}
}
}
@@ -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) }
)
}
}
}
@@ -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)
@@ -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