Исправлена навигация
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.compose.weekcalendar.WeekCalendarState
|
||||||
import com.kizitonwose.calendar.core.*
|
import com.kizitonwose.calendar.core.*
|
||||||
import kotlinx.coroutines.flow.filterNotNull
|
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.navigation.BaseNavRote
|
||||||
import ru.megboyzz.dnevnik.ui.theme.dark
|
import ru.megboyzz.dnevnik.ui.theme.dark
|
||||||
import java.time.DayOfWeek
|
import java.time.DayOfWeek
|
||||||
@@ -49,13 +51,18 @@ fun SpacerHeight(height: Dp) = Spacer(Modifier.height(height))
|
|||||||
@Composable
|
@Composable
|
||||||
fun Int.AsImageVector() = ImageVector.vectorResource(this)
|
fun Int.AsImageVector() = ImageVector.vectorResource(this)
|
||||||
|
|
||||||
@Composable
|
|
||||||
fun NavController.navigate(to: BaseNavRote){
|
fun NavController.navigate(to: BaseNavRote){
|
||||||
|
/*
|
||||||
LaunchedEffect(Unit){
|
LaunchedEffect(Unit){
|
||||||
navigate(to.route) {
|
navigate(to.route) {
|
||||||
popUpTo(to.route) { inclusive = true }
|
popUpTo(to.route) { inclusive = true }
|
||||||
}
|
}
|
||||||
|
}*/
|
||||||
|
|
||||||
|
this.navigate(to.route){
|
||||||
|
launchSingleTop = true
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Modifier.drawColoredShadow(
|
fun Modifier.drawColoredShadow(
|
||||||
|
|||||||
@@ -2,12 +2,18 @@ package ru.megboyzz.dnevnik.navigation
|
|||||||
|
|
||||||
import androidx.compose.animation.ExperimentalAnimationApi
|
import androidx.compose.animation.ExperimentalAnimationApi
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
|
import androidx.compose.foundation.lazy.LazyColumn
|
||||||
import androidx.compose.material.Text
|
import androidx.compose.material.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.remember
|
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.NavHost
|
||||||
import androidx.navigation.compose.composable
|
import androidx.navigation.compose.composable
|
||||||
|
import androidx.navigation.createGraph
|
||||||
import com.google.accompanist.navigation.animation.rememberAnimatedNavController
|
import com.google.accompanist.navigation.animation.rememberAnimatedNavController
|
||||||
import ru.megboyzz.dnevnik.AsString
|
import ru.megboyzz.dnevnik.AsString
|
||||||
import ru.megboyzz.dnevnik.R
|
import ru.megboyzz.dnevnik.R
|
||||||
@@ -63,9 +69,15 @@ fun MarksSubScreenNavHost() {
|
|||||||
remember { mutableStateOf(false) }
|
remember { mutableStateOf(false) }
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
Column {
|
|
||||||
SubScreenNavBar(list = list, subScreenNavController = navController)
|
|
||||||
|
|
||||||
|
//TODO - исправить костыль)))
|
||||||
|
// Костыль с перевернутым лайаутом: суть в том что NavHost создает NavGraph который использует
|
||||||
|
// SubScreenNavBar, но в колумне сначала идет SubScreenNavBar а потом NavHost, и где то из-за этого
|
||||||
|
// вылетает NPE, так как еще нет графа
|
||||||
|
LazyColumn(
|
||||||
|
reverseLayout = true
|
||||||
|
){
|
||||||
|
item {
|
||||||
NavHost(
|
NavHost(
|
||||||
navController = navController,
|
navController = navController,
|
||||||
startDestination = MarksNavRoute.LastMarks.route
|
startDestination = MarksNavRoute.LastMarks.route
|
||||||
@@ -78,5 +90,10 @@ fun MarksSubScreenNavHost() {
|
|||||||
composable(MarksNavRoute.ByYearMarks.route) { Text(MarksNavRoute.ByYearMarks.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.Image
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
@@ -6,8 +6,6 @@ import androidx.compose.foundation.layout.*
|
|||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
import androidx.compose.material.Text
|
import androidx.compose.material.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.mutableStateOf
|
|
||||||
import androidx.compose.runtime.remember
|
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.draw.clip
|
import androidx.compose.ui.draw.clip
|
||||||
@@ -25,25 +23,6 @@ import ru.megboyzz.dnevnik.R
|
|||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun BottomBar(navController: NavController) {
|
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(
|
Box(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
@@ -68,16 +47,19 @@ fun BottomBar(navController: NavController) {
|
|||||||
) {
|
) {
|
||||||
BottomNavButton(
|
BottomNavButton(
|
||||||
icon = R.drawable.ic_marks.AsPainter(),
|
icon = R.drawable.ic_marks.AsPainter(),
|
||||||
text = R.string.title_marks.AsString()
|
text = R.string.title_marks.AsString(),
|
||||||
) { goToMarks.value = true }
|
onClick = { navController.navigate(AppNavRoute.Marks) }
|
||||||
|
)
|
||||||
BottomNavButton(
|
BottomNavButton(
|
||||||
icon = R.drawable.ic_homework.AsPainter(),
|
icon = R.drawable.ic_homework.AsPainter(),
|
||||||
text = R.string.title_hw.AsString()
|
text = R.string.title_hw.AsString(),
|
||||||
) { goToHw.value = true }
|
onClick = { navController.navigate(AppNavRoute.HomeWorks) }
|
||||||
|
)
|
||||||
BottomNavButton(
|
BottomNavButton(
|
||||||
icon = R.drawable.ic_schedule.AsPainter(),
|
icon = R.drawable.ic_schedule.AsPainter(),
|
||||||
text = R.string.title_schedule.AsString()
|
text = R.string.title_schedule.AsString(),
|
||||||
) { goToSchedule.value = true }
|
onClick = { navController.navigate(AppNavRoute.Schedule) }
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,25 +37,7 @@ fun DrawerContent(
|
|||||||
scaffoldState: ScaffoldState
|
scaffoldState: ScaffoldState
|
||||||
) {
|
) {
|
||||||
|
|
||||||
// УЖАСНЫЙ КОСТЫЛЬ ДЛЯ ПЕРЕХОДОВ С ПОМОЩЬЮ СТЕЙТОВ TODO - УБРАТЬ
|
|
||||||
val goToMarks = remember { mutableStateOf(false) }
|
|
||||||
val goToHw = remember { mutableStateOf(false) }
|
|
||||||
val goToSchedule = remember { mutableStateOf(false) }
|
|
||||||
|
|
||||||
val scope = rememberCoroutineScope()
|
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(
|
Column(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.width(260.dp)
|
.width(260.dp)
|
||||||
@@ -74,20 +56,36 @@ fun DrawerContent(
|
|||||||
) {
|
) {
|
||||||
DrawerMainButton(
|
DrawerMainButton(
|
||||||
icon = R.drawable.ic_marks.AsPainter(),
|
icon = R.drawable.ic_marks.AsPainter(),
|
||||||
text = R.string.title_marks.AsString()
|
text = R.string.title_marks.AsString(),
|
||||||
) { goToMarks.value = true }
|
onClick = {
|
||||||
|
navController.navigate(AppNavRoute.Marks)
|
||||||
|
scope.launch { scaffoldState.drawerState.close() }
|
||||||
|
}
|
||||||
|
)
|
||||||
DrawerMainButton(
|
DrawerMainButton(
|
||||||
icon = R.drawable.ic_homework.AsPainter(),
|
icon = R.drawable.ic_homework.AsPainter(),
|
||||||
text = R.string.title_hw.AsString()
|
text = R.string.title_hw.AsString(),
|
||||||
) { goToHw.value = true }
|
onClick = {
|
||||||
|
navController.navigate(AppNavRoute.HomeWorks)
|
||||||
|
scope.launch { scaffoldState.drawerState.close() }
|
||||||
|
}
|
||||||
|
)
|
||||||
DrawerMainButton(
|
DrawerMainButton(
|
||||||
icon = R.drawable.ic_schedule.AsPainter(),
|
icon = R.drawable.ic_schedule.AsPainter(),
|
||||||
text = R.string.title_schedule.AsString()
|
text = R.string.title_schedule.AsString(),
|
||||||
) { goToSchedule.value = true }
|
onClick = {
|
||||||
|
navController.navigate(AppNavRoute.Schedule)
|
||||||
|
scope.launch { scaffoldState.drawerState.close() }
|
||||||
|
}
|
||||||
|
)
|
||||||
DrawerMainButton(
|
DrawerMainButton(
|
||||||
icon = R.drawable.ic_settings.AsPainter(),
|
icon = R.drawable.ic_settings.AsPainter(),
|
||||||
text = R.string.title_settings.AsString()
|
text = R.string.title_settings.AsString(),
|
||||||
) { /* TODO */ }
|
onClick = {
|
||||||
|
navController.navigate(AppNavRoute.Settings)
|
||||||
|
scope.launch { scaffoldState.drawerState.close() }
|
||||||
|
}
|
||||||
|
)
|
||||||
}
|
}
|
||||||
Spacer(Modifier.weight(1f))
|
Spacer(Modifier.weight(1f))
|
||||||
Divider(color = white, thickness = 1.dp)
|
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.Icons
|
||||||
import androidx.compose.material.icons.filled.ArrowBack
|
import androidx.compose.material.icons.filled.ArrowBack
|
||||||
import androidx.compose.material.icons.filled.Menu
|
import androidx.compose.material.icons.filled.Menu
|
||||||
import androidx.compose.material.icons.filled.Settings
|
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.rememberCoroutineScope
|
import androidx.compose.runtime.rememberCoroutineScope
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.graphics.painter.Painter
|
import androidx.compose.ui.graphics.painter.Painter
|
||||||
import androidx.compose.ui.graphics.vector.ImageVector
|
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.dp
|
||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
import androidx.navigation.NavController
|
import androidx.navigation.NavController
|
||||||
@@ -24,7 +22,6 @@ import kotlinx.coroutines.launch
|
|||||||
import ru.megboyzz.dnevnik.AsPainter
|
import ru.megboyzz.dnevnik.AsPainter
|
||||||
import ru.megboyzz.dnevnik.AsString
|
import ru.megboyzz.dnevnik.AsString
|
||||||
import ru.megboyzz.dnevnik.SpacerWidth
|
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.DrawerContent
|
||||||
import ru.megboyzz.dnevnik.screens.ui.drawerShape
|
import ru.megboyzz.dnevnik.screens.ui.drawerShape
|
||||||
import ru.megboyzz.dnevnik.ui.theme.mainBlue
|
import ru.megboyzz.dnevnik.ui.theme.mainBlue
|
||||||
|
|||||||
Reference in New Issue
Block a user