Лечение детских болезней 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 androidx.navigation.NavController
import ru.megboyzz.dnevnik.* import ru.megboyzz.dnevnik.*
import ru.megboyzz.dnevnik.R import ru.megboyzz.dnevnik.R
import ru.megboyzz.dnevnik.navigation.AppNavRoute
import ru.megboyzz.dnevnik.screens.ui.UnderlinedText import ru.megboyzz.dnevnik.screens.ui.UnderlinedText
import ru.megboyzz.dnevnik.screens.ui.main.SettingsScaffold import ru.megboyzz.dnevnik.screens.ui.main.SettingsScaffold
import ru.megboyzz.dnevnik.ui.theme.H2 import ru.megboyzz.dnevnik.ui.theme.H2
@@ -23,9 +24,7 @@ fun SettingsScreen(
) { ) {
SettingsScaffold( SettingsScaffold(
onLeave = { onLeave = { navController.navigate(AppNavRoute.Marks) },
//navController.navigate()
},
scaffoldState = scaffoldState, scaffoldState = scaffoldState,
navController = navController navController = navController
) { ) {
@@ -20,9 +20,12 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.navigation.compose.rememberNavController import androidx.navigation.compose.rememberNavController
import com.kizitonwose.calendar.core.daysOfWeek 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.SettingsScreen
import ru.megboyzz.dnevnik.screens.ui.* import ru.megboyzz.dnevnik.screens.ui.*
import ru.megboyzz.dnevnik.screens.ui.calendar.NiceCalendar 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.main.SettingsScaffold
import ru.megboyzz.dnevnik.screens.ui.piechart.PieChart import ru.megboyzz.dnevnik.screens.ui.piechart.PieChart
import ru.megboyzz.dnevnik.screens.ui.piechart.PieChartCard import ru.megboyzz.dnevnik.screens.ui.piechart.PieChartCard
@@ -363,7 +366,7 @@ fun ScaffoldTest() {
val scaffoldState = rememberScaffoldState() val scaffoldState = rememberScaffoldState()
val navController = rememberNavController() val navController = rememberNavController()
SettingsScaffold( SettingsScaffold(
onLeave = { /*TODO*/ }, onLeave = { navController.navigate(AppNavRoute.Marks) },
scaffoldState = scaffoldState, scaffoldState = scaffoldState,
navController = navController navController = navController
) { ) {
@@ -1,18 +1,22 @@
package ru.megboyzz.dnevnik.screens.ui package ru.megboyzz.dnevnik.screens.ui.main
import android.annotation.SuppressLint import android.annotation.SuppressLint
import androidx.compose.foundation.Image import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.Divider import androidx.compose.material.Divider
import androidx.compose.material.ScaffoldState import androidx.compose.material.ScaffoldState
import androidx.compose.material.Surface
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.runtime.rememberCoroutineScope import androidx.compose.runtime.rememberCoroutineScope
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.shadow
import androidx.compose.ui.geometry.CornerRadius import androidx.compose.ui.geometry.CornerRadius
import androidx.compose.ui.geometry.Rect
import androidx.compose.ui.geometry.RoundRect import androidx.compose.ui.geometry.RoundRect
import androidx.compose.ui.geometry.Size import androidx.compose.ui.geometry.Size
import androidx.compose.ui.graphics.Color 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.Density
import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.zIndex
import androidx.navigation.NavController import androidx.navigation.NavController
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import ru.megboyzz.dnevnik.* import ru.megboyzz.dnevnik.*
import ru.megboyzz.dnevnik.R import ru.megboyzz.dnevnik.R
import ru.megboyzz.dnevnik.navigation.AppNavRoute 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.H2
import ru.megboyzz.dnevnik.ui.theme.Shapes
import ru.megboyzz.dnevnik.ui.theme.mainBlue
import ru.megboyzz.dnevnik.ui.theme.white 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 @Composable
fun DrawerContent( fun DrawerContent(
navController: NavController, navController: NavController,
@@ -38,93 +78,69 @@ fun DrawerContent(
) { ) {
val scope = rememberCoroutineScope() val scope = rememberCoroutineScope()
Column( NiceContainerForDrawer {
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)
Column( Column(
verticalArrangement = Arrangement.spacedBy(5.dp), modifier = Modifier
modifier = Modifier.padding(5.dp, 0.dp) .width(260.dp)
.fillMaxSize()
.padding(10.dp)
.background(mainBlue),
horizontalAlignment = Alignment.Start,
) { ) {
DrawerMainButton( SpacerHeight(10.dp)
icon = R.drawable.ic_marks.AsPainter(), ProfileCard(painter = R.drawable.ic_author.AsPainter())
text = R.string.title_marks.AsString(), SpacerHeight(15.dp)
onClick = { AlmostOutlinedText(text = "Идет 3-я четверть")
navController.navigate(AppNavRoute.Marks) SpacerHeight(20.dp)
scope.launch { scaffoldState.drawerState.close() } Column(
} verticalArrangement = Arrangement.spacedBy(5.dp),
) ) {
DrawerMainButton( DrawerMainButton(
icon = R.drawable.ic_homework.AsPainter(), icon = R.drawable.ic_marks.AsPainter(),
text = R.string.title_hw.AsString(), text = R.string.title_marks.AsString(),
onClick = { onClick = {
navController.navigate(AppNavRoute.HomeWorks) navController.navigate(AppNavRoute.Marks)
scope.launch { scaffoldState.drawerState.close() } scope.launch { scaffoldState.drawerState.close() }
} }
) )
DrawerMainButton( DrawerMainButton(
icon = R.drawable.ic_schedule.AsPainter(), icon = R.drawable.ic_homework.AsPainter(),
text = R.string.title_schedule.AsString(), text = R.string.title_hw.AsString(),
onClick = { onClick = {
navController.navigate(AppNavRoute.Schedule) navController.navigate(AppNavRoute.HomeWorks)
scope.launch { scaffoldState.drawerState.close() } scope.launch { scaffoldState.drawerState.close() }
} }
) )
DrawerMainButton( DrawerMainButton(
icon = R.drawable.ic_settings.AsPainter(), icon = R.drawable.ic_schedule.AsPainter(),
text = R.string.title_settings.AsString(), text = R.string.title_schedule.AsString(),
onClick = { onClick = {
navController.navigate(AppNavRoute.Settings) navController.navigate(AppNavRoute.Schedule)
scope.launch { scaffoldState.drawerState.close() } scope.launch { scaffoldState.drawerState.close() }
} }
) )
} DrawerMainButton(
Spacer(Modifier.weight(1f)) icon = R.drawable.ic_settings.AsPainter(),
Divider(color = white, thickness = 1.dp) text = R.string.title_settings.AsString(),
SpacerHeight(5.dp) onClick = {
Column(Modifier.padding(5.dp, 0.dp)) { navController.navigate(AppNavRoute.Settings)
DrawerMainButton( scope.launch { scaffoldState.drawerState.close() }
icon = R.drawable.ic_exit.AsPainter(), }
text = R.string.title_leave_from_acconut.AsString() )
) { /* TODO */ } }
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 @Composable
fun DrawerMainButton( fun DrawerMainButton(
icon: Painter, icon: Painter,
@@ -132,26 +148,23 @@ fun DrawerMainButton(
textColor: Color = white, textColor: Color = white,
onClick: () -> Unit = {} onClick: () -> Unit = {}
) { ) {
Column( Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.height(30.dp) .height(30.dp)
.mainClickable(onClick = onClick), .mainClickable { onClick.invoke() }
verticalArrangement = Arrangement.Center ){
) { Image(
Row( painter = icon,
horizontalArrangement = Arrangement.Start contentDescription = "icon",
){ Modifier.padding(start = 10.dp)
Image( )
painter = icon, SpacerWidth(13.dp)
contentDescription = "icon" Text(
) text = text,
SpacerWidth(13.dp) style = H2,
Text( color = textColor
text = text, )
style = H2,
color = textColor
)
}
} }
} }
@@ -22,8 +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.DrawerContent
import ru.megboyzz.dnevnik.screens.ui.drawerShape
import ru.megboyzz.dnevnik.ui.theme.mainBlue import ru.megboyzz.dnevnik.ui.theme.mainBlue
import ru.megboyzz.dnevnik.ui.theme.white import ru.megboyzz.dnevnik.ui.theme.white
import ru.megboyzz.dnevnik.R import ru.megboyzz.dnevnik.R
@@ -32,7 +30,6 @@ import ru.megboyzz.dnevnik.R
fun MainScaffold( fun MainScaffold(
icon: Painter, icon: Painter,
title: String, title: String,
/* TODO viewModel */
navController: NavController, navController: NavController,
scaffoldState: ScaffoldState, scaffoldState: ScaffoldState,
content: (@Composable (it: PaddingValues) -> Unit), content: (@Composable (it: PaddingValues) -> Unit),
@@ -99,10 +96,13 @@ fun BaseScaffold(
} }
}, },
content = content, content = content,
drawerBackgroundColor = mainBlue, drawerBackgroundColor = Color.Transparent,
drawerContentColor = white, drawerContentColor = Color.Transparent,
drawerShape = drawerShape, //drawerShape = drawerShape,
drawerContent = { DrawerContent(navController, scaffoldState) }, drawerElevation = 0.dp,
drawerContent = {
DrawerContent(navController, scaffoldState)
},
bottomBar = bottomBar bottomBar = bottomBar
) )
} }
@@ -1,7 +1,5 @@
import org.gradle.api.artifacts.dsl.DependencyHandler import org.gradle.api.artifacts.dsl.DependencyHandler
//TODO - придумать обработчик зависмостей основанный на рефлексии
object AppLibraries: DependencyList() { object AppLibraries: DependencyList() {
//std lib //std lib