Исправлена навигация
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user