From 93978b0b420143eef6583aff2c5e6efd82faefbd Mon Sep 17 00:00:00 2001 From: Danya_Mochalov Date: Wed, 8 Nov 2023 05:46:59 +0400 Subject: [PATCH] =?UTF-8?q?=D0=AD=D0=BA=D1=80=D0=B0=D0=BD=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D0=B4=D1=83=D0=BA=D1=82=D0=BE=D0=B2=20=D0=B3=D0=BE=D1=82?= =?UTF-8?q?=D0=BE=D0=B2.=20=D0=9E=D1=81=D1=82=D0=B0=D0=BB=D0=BE=D1=81?= =?UTF-8?q?=D1=8C=20=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D1=82=D1=8C=20=D1=8D?= =?UTF-8?q?=D0=BA=D1=80=D0=B0=D0=BD=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=BD=D0=BE=D0=B2=D0=BE=D0=B3=D0=BE=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B4=D1=83=D0=BA=D1=82=D0=B0=20=D0=B8=20=D1=80?= =?UTF-8?q?=D0=B5=D0=B4=D0=B0=D0=BA=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D1=81=D1=83=D1=89=D0=B5=D1=81=D1=82=D0=B2?= =?UTF-8?q?=D1=83=D1=8E=D1=89=D0=B5=D0=B3=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/shawarma/data/dao/ProductDao.kt | 3 + .../example/shawarma/screens/MainNavBar.kt | 4 + .../screens/products/ProductsScreen.kt | 189 ++++++++++++++++++ .../example/shawarma/widgets/BottomNavBar.kt | 3 +- 4 files changed, 198 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/example/shawarma/screens/products/ProductsScreen.kt diff --git a/app/src/main/java/com/example/shawarma/data/dao/ProductDao.kt b/app/src/main/java/com/example/shawarma/data/dao/ProductDao.kt index 7376d46..f8d01d9 100644 --- a/app/src/main/java/com/example/shawarma/data/dao/ProductDao.kt +++ b/app/src/main/java/com/example/shawarma/data/dao/ProductDao.kt @@ -25,6 +25,9 @@ interface ProductDao { @Query("select * from products where products.product_old_price is not null") fun getDiscounts() : Flow> + @Query("select * from products") + fun getItems() : Flow> + @Query("select * from products where products.id = :id") fun getById(id: Int): ProductModel } \ No newline at end of file diff --git a/app/src/main/java/com/example/shawarma/screens/MainNavBar.kt b/app/src/main/java/com/example/shawarma/screens/MainNavBar.kt index ebf6b4f..7658f60 100644 --- a/app/src/main/java/com/example/shawarma/screens/MainNavBar.kt +++ b/app/src/main/java/com/example/shawarma/screens/MainNavBar.kt @@ -17,6 +17,7 @@ import com.example.shawarma.screens.cart.CartScreen import com.example.shawarma.screens.discount.DiscountScreen import com.example.shawarma.screens.home.HomeScreen import com.example.shawarma.screens.orders.OrdersScreen +import com.example.shawarma.screens.products.ProductsScreen import com.example.shawarma.screens.registration.RegistrationScreen import com.example.shawarma.ui.theme.MyLightYellow import com.example.shawarma.utils.ScreenPaths @@ -56,6 +57,9 @@ fun MainNavBar() { composable(ScreenPaths.orders.name) { OrdersScreen() } + composable(ScreenPaths.products.name) { + ProductsScreen() + } } } } \ No newline at end of file diff --git a/app/src/main/java/com/example/shawarma/screens/products/ProductsScreen.kt b/app/src/main/java/com/example/shawarma/screens/products/ProductsScreen.kt new file mode 100644 index 0000000..473d5c8 --- /dev/null +++ b/app/src/main/java/com/example/shawarma/screens/products/ProductsScreen.kt @@ -0,0 +1,189 @@ +package com.example.shawarma.screens.products + +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.magnifier +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.Button +import androidx.compose.material.ButtonDefaults +import androidx.compose.material.Card +import androidx.compose.material.Icon +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.mutableStateListOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import androidx.compose.ui.zIndex +import com.example.shawarma.R +import com.example.shawarma.data.db.AppDatabase +import com.example.shawarma.data.models.ProductModel +import com.example.shawarma.screens.home.HomeList +import com.example.shawarma.screens.home.ProductCard +import com.example.shawarma.ui.theme.MarckFamily +import com.example.shawarma.ui.theme.MyLightRed +import com.example.shawarma.ui.theme.MyLightYellow +import com.example.shawarma.ui.theme.MyMainBackground +import com.example.shawarma.ui.theme.MyOrange +import com.example.shawarma.ui.theme.NunitoFamily +import com.example.shawarma.widgets.ShawarmaLogo2 +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext + +@Composable +fun ProductsScreen() { + Box( + contentAlignment = Alignment.TopCenter + ) { + ProductsList() + ShawarmaLogo2() + } +} + + + +@Composable +fun ProductsList(){ + val context = LocalContext.current + val products = remember { mutableStateListOf() } + LaunchedEffect(Unit) { + withContext(Dispatchers.IO) { + AppDatabase.getInstance(context).productDao().getItems().collect { data -> + products.clear() + products.addAll(data) + } + } + } + + Box( + modifier = Modifier + .clip(shape = RoundedCornerShape(30.dp)) + .padding(top = 100.dp) + .fillMaxSize() + .background(color = MyMainBackground) + .zIndex(2f), + + contentAlignment = Alignment.TopCenter + ){ + Text( + text = "Товары", + fontFamily = MarckFamily, + fontSize = 40.sp, + modifier = Modifier.padding(top = 15.dp) + ) + Button( + modifier = Modifier + .padding(top = 80.dp) + .size(340.dp, 60.dp), + colors = ButtonDefaults.buttonColors( + backgroundColor = MyLightYellow + ), + border = BorderStroke(2.dp, color = MyOrange), + shape = RoundedCornerShape(20.dp), + onClick = { /*TODO*/ } + ) { + Text( + text = "Добавить товар", + fontFamily = NunitoFamily, + fontSize = 24.sp, + fontWeight = FontWeight.Bold + ) + } + LazyColumn( + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier.padding(top = 160.dp) + ) + { + items(products.size) { index -> + ProductItem(products[index]) + Spacer(modifier = Modifier.height(20.dp)) + if (index == products.size - 1) { + Spacer(modifier = Modifier.height(70.dp)) + } + } + } + + } +} + +@Composable +fun ProductItem(product: ProductModel){ + Card( + border = BorderStroke(width = 2.dp, color = MyOrange), + shape = RoundedCornerShape(size = 20.dp), + backgroundColor = Color.White, + modifier = Modifier.size(340.dp, 100.dp) + ) { + Row( + modifier = Modifier + .padding(20.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceAround + ) { + Column( + modifier = Modifier.fillMaxWidth(0.5f) + ) { + Text( + text = product.title, + fontFamily = NunitoFamily, + fontSize = 20.sp, + fontWeight = FontWeight.Bold + ) + Text( + text = product.price.toString() + " руб.", + fontFamily = NunitoFamily, + fontSize = 20.sp, + fontWeight = FontWeight.Bold + ) + } + + Button( + modifier = Modifier.size(60.dp), + shape = RoundedCornerShape(10.dp), + colors = ButtonDefaults.buttonColors( + backgroundColor = MyLightYellow + ), + onClick = { /*TODO*/ } + ) { + Icon( + painter = painterResource(id = R.drawable.pen_icon), + contentDescription = "pen", + modifier = Modifier.fillMaxSize() + ) + } + Button( + modifier = Modifier.size(60.dp), + shape = RoundedCornerShape(10.dp), + colors = ButtonDefaults.buttonColors( + backgroundColor = MyLightRed + ), + onClick = { /*TODO*/ } + ) { + Icon( + painter = painterResource(id = R.drawable.trash), + contentDescription = "trash", + modifier = Modifier.fillMaxSize() + ) + } + } + } +} diff --git a/app/src/main/java/com/example/shawarma/widgets/BottomNavBar.kt b/app/src/main/java/com/example/shawarma/widgets/BottomNavBar.kt index 37fceaa..f4cbf08 100644 --- a/app/src/main/java/com/example/shawarma/widgets/BottomNavBar.kt +++ b/app/src/main/java/com/example/shawarma/widgets/BottomNavBar.kt @@ -23,7 +23,8 @@ fun BottomNavBar(navController: NavController) { BottomNavItem.Discount, BottomNavItem.Home, BottomNavItem.Cart, - BottomNavItem.Orders + BottomNavItem.Orders, + BottomNavItem.Products ) BottomNavigation( backgroundColor = Color.White,