Лечение детских болезней Drawer, фикс Settings

This commit is contained in:
2023-04-09 15:28:15 +03:00
parent dbc528b45d
commit 1914b11bc9
5 changed files with 129 additions and 116 deletions
@@ -12,6 +12,7 @@ import androidx.compose.ui.unit.dp
import androidx.navigation.NavController
import ru.megboyzz.dnevnik.*
import ru.megboyzz.dnevnik.R
import ru.megboyzz.dnevnik.navigation.AppNavRoute
import ru.megboyzz.dnevnik.screens.ui.UnderlinedText
import ru.megboyzz.dnevnik.screens.ui.main.SettingsScaffold
import ru.megboyzz.dnevnik.ui.theme.H2
@@ -23,9 +24,7 @@ fun SettingsScreen(
) {
SettingsScaffold(
onLeave = {
//navController.navigate()
},
onLeave = { navController.navigate(AppNavRoute.Marks) },
scaffoldState = scaffoldState,
navController = navController
) {
@@ -20,9 +20,12 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.navigation.compose.rememberNavController
import com.kizitonwose.calendar.core.daysOfWeek
import ru.megboyzz.dnevnik.navigate
import ru.megboyzz.dnevnik.navigation.AppNavRoute
import ru.megboyzz.dnevnik.screens.SettingsScreen
import ru.megboyzz.dnevnik.screens.ui.*
import ru.megboyzz.dnevnik.screens.ui.calendar.NiceCalendar
import ru.megboyzz.dnevnik.screens.ui.main.DrawerContent
import ru.megboyzz.dnevnik.screens.ui.main.SettingsScaffold
import ru.megboyzz.dnevnik.screens.ui.piechart.PieChart
import ru.megboyzz.dnevnik.screens.ui.piechart.PieChartCard
@@ -363,7 +366,7 @@ fun ScaffoldTest() {
val scaffoldState = rememberScaffoldState()
val navController = rememberNavController()
SettingsScaffold(
onLeave = { /*TODO*/ },
onLeave = { navController.navigate(AppNavRoute.Marks) },
scaffoldState = scaffoldState,
navController = navController
) {
@@ -1,18 +1,22 @@
package ru.megboyzz.dnevnik.screens.ui
package ru.megboyzz.dnevnik.screens.ui.main
import android.annotation.SuppressLint
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.Divider
import androidx.compose.material.ScaffoldState
import androidx.compose.material.Surface
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.draw.shadow
import androidx.compose.ui.geometry.CornerRadius
import androidx.compose.ui.geometry.Rect
import androidx.compose.ui.geometry.RoundRect
import androidx.compose.ui.geometry.Size
import androidx.compose.ui.graphics.Color
@@ -22,15 +26,51 @@ import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.dp
import androidx.compose.ui.zIndex
import androidx.navigation.NavController
import kotlinx.coroutines.launch
import ru.megboyzz.dnevnik.*
import ru.megboyzz.dnevnik.R
import ru.megboyzz.dnevnik.navigation.AppNavRoute
import ru.megboyzz.dnevnik.screens.ui.AlmostOutlinedText
import ru.megboyzz.dnevnik.screens.ui.ProfileCard
import ru.megboyzz.dnevnik.ui.theme.H2
import ru.megboyzz.dnevnik.ui.theme.Shapes
import ru.megboyzz.dnevnik.ui.theme.mainBlue
import ru.megboyzz.dnevnik.ui.theme.white
@SuppressLint("CoroutineCreationDuringComposition")
@Composable
fun NiceContainerForDrawer(
content: @Composable () -> Unit
) {
val elevation = 16.dp
val shape = RoundedCornerShape(
topEnd = 20.dp,
bottomEnd = 20.dp
)
Box(
modifier = Modifier
.shadow(elevation)
.zIndex(1f)
.clip(shape)
) {
Box(
modifier = Modifier
.background(
color = mainBlue,
shape = shape
)
.clip(shape)
) {
content.invoke()
}
}
}
@Composable
fun DrawerContent(
navController: NavController,
@@ -38,93 +78,69 @@ fun DrawerContent(
) {
val scope = rememberCoroutineScope()
Column(
modifier = Modifier
.width(260.dp)
.fillMaxSize()
.padding(10.dp),
horizontalAlignment = Alignment.Start
){
SpacerHeight(10.dp)
ProfileCard(painter = R.drawable.ic_author.AsPainter())
SpacerHeight(15.dp)
AlmostOutlinedText(text = "Идет 3-я четверть")
SpacerHeight(20.dp)
NiceContainerForDrawer {
Column(
verticalArrangement = Arrangement.spacedBy(5.dp),
modifier = Modifier.padding(5.dp, 0.dp)
modifier = Modifier
.width(260.dp)
.fillMaxSize()
.padding(10.dp)
.background(mainBlue),
horizontalAlignment = Alignment.Start,
) {
DrawerMainButton(
icon = R.drawable.ic_marks.AsPainter(),
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(),
onClick = {
navController.navigate(AppNavRoute.HomeWorks)
scope.launch { scaffoldState.drawerState.close() }
}
)
DrawerMainButton(
icon = R.drawable.ic_schedule.AsPainter(),
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(),
onClick = {
navController.navigate(AppNavRoute.Settings)
scope.launch { scaffoldState.drawerState.close() }
}
)
}
Spacer(Modifier.weight(1f))
Divider(color = white, thickness = 1.dp)
SpacerHeight(5.dp)
Column(Modifier.padding(5.dp, 0.dp)) {
DrawerMainButton(
icon = R.drawable.ic_exit.AsPainter(),
text = R.string.title_leave_from_acconut.AsString()
) { /* TODO */ }
SpacerHeight(10.dp)
ProfileCard(painter = R.drawable.ic_author.AsPainter())
SpacerHeight(15.dp)
AlmostOutlinedText(text = "Идет 3-я четверть")
SpacerHeight(20.dp)
Column(
verticalArrangement = Arrangement.spacedBy(5.dp),
) {
DrawerMainButton(
icon = R.drawable.ic_marks.AsPainter(),
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(),
onClick = {
navController.navigate(AppNavRoute.HomeWorks)
scope.launch { scaffoldState.drawerState.close() }
}
)
DrawerMainButton(
icon = R.drawable.ic_schedule.AsPainter(),
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(),
onClick = {
navController.navigate(AppNavRoute.Settings)
scope.launch { scaffoldState.drawerState.close() }
}
)
}
Spacer(Modifier.weight(1f))
Divider(color = white, thickness = 1.dp)
SpacerHeight(5.dp)
Column(Modifier.padding(5.dp, 0.dp)) {
DrawerMainButton(
icon = R.drawable.ic_exit.AsPainter(),
text = R.string.title_leave_from_acconut.AsString()
) { /* TODO */ }
}
}
}
}
val drawerShape = object : Shape {
override fun createOutline(
size: Size,
layoutDirection: LayoutDirection,
density: Density
): Outline.Rounded {
val radius = CornerRadius(30f, 30f)
val nullRadius = CornerRadius.Zero
return Outline.Rounded(
RoundRect(
left = 0f,
top = 0f,
right = size.width * 26 / 36,
bottom = size.height,
topLeftCornerRadius = nullRadius,
topRightCornerRadius = radius,
bottomRightCornerRadius = radius,
bottomLeftCornerRadius = nullRadius
)
)
}
}
@Composable
fun DrawerMainButton(
icon: Painter,
@@ -132,26 +148,23 @@ fun DrawerMainButton(
textColor: Color = white,
onClick: () -> Unit = {}
) {
Column(
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier
.fillMaxWidth()
.height(30.dp)
.mainClickable(onClick = onClick),
verticalArrangement = Arrangement.Center
) {
Row(
horizontalArrangement = Arrangement.Start
){
Image(
painter = icon,
contentDescription = "icon"
)
SpacerWidth(13.dp)
Text(
text = text,
style = H2,
color = textColor
)
}
.mainClickable { onClick.invoke() }
){
Image(
painter = icon,
contentDescription = "icon",
Modifier.padding(start = 10.dp)
)
SpacerWidth(13.dp)
Text(
text = text,
style = H2,
color = textColor
)
}
}
@@ -22,8 +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.DrawerContent
import ru.megboyzz.dnevnik.screens.ui.drawerShape
import ru.megboyzz.dnevnik.ui.theme.mainBlue
import ru.megboyzz.dnevnik.ui.theme.white
import ru.megboyzz.dnevnik.R
@@ -32,7 +30,6 @@ import ru.megboyzz.dnevnik.R
fun MainScaffold(
icon: Painter,
title: String,
/* TODO viewModel */
navController: NavController,
scaffoldState: ScaffoldState,
content: (@Composable (it: PaddingValues) -> Unit),
@@ -99,10 +96,13 @@ fun BaseScaffold(
}
},
content = content,
drawerBackgroundColor = mainBlue,
drawerContentColor = white,
drawerShape = drawerShape,
drawerContent = { DrawerContent(navController, scaffoldState) },
drawerBackgroundColor = Color.Transparent,
drawerContentColor = Color.Transparent,
//drawerShape = drawerShape,
drawerElevation = 0.dp,
drawerContent = {
DrawerContent(navController, scaffoldState)
},
bottomBar = bottomBar
)
}
@@ -1,7 +1,5 @@
import org.gradle.api.artifacts.dsl.DependencyHandler
//TODO - придумать обработчик зависмостей основанный на рефлексии
object AppLibraries: DependencyList() {
//std lib