diff --git a/app/src/main/java/com/example/myapplication/components/AddProduct.kt b/app/src/main/java/com/example/myapplication/components/AddProduct.kt deleted file mode 100644 index 18ec699..0000000 --- a/app/src/main/java/com/example/myapplication/components/AddProduct.kt +++ /dev/null @@ -1,8 +0,0 @@ -import androidx.compose.foundation.layout.Column -import androidx.compose.runtime.Composable -import androidx.navigation.NavController - -@Composable -fun Authorization() { - -} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/components/Cart.kt b/app/src/main/java/com/example/myapplication/components/Cart.kt index 3d1b302..72aad43 100644 --- a/app/src/main/java/com/example/myapplication/components/Cart.kt +++ b/app/src/main/java/com/example/myapplication/components/Cart.kt @@ -1,4 +1,6 @@ import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn @@ -6,6 +8,7 @@ import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.tooling.preview.Preview @@ -16,45 +19,21 @@ import androidx.navigation.compose.rememberNavController import com.example.myapplication.R @Composable -fun Cart(navController: NavController){ +fun Cart(navController: NavController, products: List ){ + LazyColumn (contentPadding = PaddingValues(horizontal = 16.dp, vertical = 8.dp)){ + item { + TextNice("Корзина") + } - LazyColumn { item { - Text( - text = "Корзина: ", - fontSize = 28.sp, - color = Color.Black, - modifier = Modifier.padding(8.dp) - ) - } - item { - ProductCardInCart("Intel Celeron G5905 OEM", 4099, R.drawable.product3) - } - item { - ProductCardInCart("MSI GeForce RTX 4090 VENTUS 3X OC", 210999, R.drawable.product1) - } - item { - ProductCardInCart("Palit GeForce GTX 1660 SUPER", 25999, R.drawable.product2) - } - item { - Button( - onClick = { }, - modifier = Modifier.fillMaxWidth().padding(top = 20.dp, bottom = 20.dp), - border = BorderStroke(1.dp, Color.Black), - colors = ButtonDefaults.buttonColors( - containerColor = Color.Magenta, - ) - ) { - TextNice("Оплатить: 240 097 рублей") + for (product in products){ + product.ProductCardInCart() + } + } + item { + Box(modifier = Modifier.padding(top = 50.dp)){ + ButtonNice(text = "Оплатить: 13 898 рублей ", color = myColor4) } } - } -} - -@Preview(showBackground = true) -@Composable -fun CartPreview() { - val navController = rememberNavController() - Cart(navController = navController) } \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/components/Main.kt b/app/src/main/java/com/example/myapplication/components/Main.kt index 0face11..e42a9b2 100644 --- a/app/src/main/java/com/example/myapplication/components/Main.kt +++ b/app/src/main/java/com/example/myapplication/components/Main.kt @@ -25,7 +25,7 @@ import androidx.navigation.compose.rememberNavController import com.example.myapplication.R @OptIn(ExperimentalMaterial3Api::class) @Composable -fun Main(navController: NavController) { +fun Main(navController: NavController, products: List) { Column( modifier = Modifier .fillMaxSize() @@ -45,15 +45,9 @@ fun Main(navController: NavController) { color = Color.Black, modifier = Modifier.padding(8.dp) ) - - //ProductCard("MSI GeForce RTX 4090 VENTUS 3X OC", 210999, R.drawable.product1, navController) - //ProductCard("Palit GeForce GTX 1660 SUPER", 25999, R.drawable.product2, navController) + for (product in products){ + product.createProductCard({navController.navigate("product/${product.id}")}) + } } } -@Preview(showBackground = true) -@Composable -fun MainPreview() { - val navController = rememberNavController() - Main(navController = navController) -} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/components/addProduct.kt b/app/src/main/java/com/example/myapplication/components/addProduct.kt new file mode 100644 index 0000000..4bda362 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/components/addProduct.kt @@ -0,0 +1,69 @@ +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +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.material3.ExperimentalMaterial3Api +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.navigation.NavController +import androidx.navigation.compose.rememberNavController + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun addProduct(navController: NavController){ + Column(modifier = Modifier + .fillMaxSize().padding(15.dp) + ) + { + Box( + modifier = Modifier.padding(bottom = 10.dp).fillMaxWidth(), + contentAlignment = Alignment.Center + ){ + TextNice("Добавление товара") + } + + OutlinedTextField( + value = "", + onValueChange = { }, + placeholder = { Text("Название товара") }, + modifier = Modifier + .fillMaxWidth() + .padding(top = 5.dp, bottom = 5.dp) + ) + OutlinedTextField( + value = "", + onValueChange = { }, + placeholder = { Text("Описание товара") }, + modifier = Modifier + .fillMaxWidth() + .padding(top = 5.dp, bottom = 5.dp) + .height(200.dp) + ) + OutlinedTextField( + value = "", + onValueChange = { }, + placeholder = { Text("Цена") }, + modifier = Modifier + .fillMaxWidth() + .padding(top = 5.dp, bottom = 20.dp) + ) + + ButtonNice(text = "Добавить", color = myColor2, onClickAction = {navController.navigate("category")}) + ButtonNice(text = "Отмена", color = Color.White, onClickAction = {navController.navigate("category")}) + } +} + +@Preview(showBackground = true) +@Composable +fun addPage() { + val navController = rememberNavController() + addProduct(navController = navController) +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/components/common/TextNice.kt b/app/src/main/java/com/example/myapplication/components/common/TextNice.kt index 2212f68..4ed3dc6 100644 --- a/app/src/main/java/com/example/myapplication/components/common/TextNice.kt +++ b/app/src/main/java/com/example/myapplication/components/common/TextNice.kt @@ -1,9 +1,10 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.sp @Composable fun TextNice(text: String) { - Text(text, fontSize = 25.sp, color = Color.Black) + Text(text, fontSize = 25.sp, color = Color.Black, fontWeight = FontWeight.Bold) } \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/components/templates/CatalogItems.kt b/app/src/main/java/com/example/myapplication/components/templates/CatalogItems.kt index 3eaec82..7365934 100644 --- a/app/src/main/java/com/example/myapplication/components/templates/CatalogItems.kt +++ b/app/src/main/java/com/example/myapplication/components/templates/CatalogItems.kt @@ -1,17 +1,29 @@ import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.PaddingValues +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.layout.width import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.vectorResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp @@ -21,23 +33,35 @@ import com.example.myapplication.R @Composable fun CatalogItems (navController: NavController, title: String, products: List){ - LazyColumn { + + LazyColumn ( + contentPadding = PaddingValues(horizontal = 16.dp, vertical = 8.dp), + ){ item { - Text( - text = title, - fontSize = 28.sp, - color = Color.Black, - modifier = Modifier.padding(8.dp) - ) + TextNice(title) } item{ for (product in products){ - product.createProductCard({}) + product.createProductCard({navController.navigate("product/${product.id}")}) } } - item { - ButtonNice("Инфо: " , myColor1, {}) + Button( + onClick = {navController.navigate("addProduct")}, + colors = ButtonDefaults.buttonColors( + containerColor= Color.Transparent, + contentColor = myColor3 + ), + contentPadding = PaddingValues(0.dp), + modifier = Modifier.size(50.dp).padding(top = 10.dp) + + ) { + Image( + painter = painterResource(id = R.drawable.add), + contentDescription = null, + modifier = Modifier.size(50.dp) + ) + } } } } \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/components/templates/ProductCard.kt b/app/src/main/java/com/example/myapplication/components/templates/ProductCard.kt index c52e742..fb1ea03 100644 --- a/app/src/main/java/com/example/myapplication/components/templates/ProductCard.kt +++ b/app/src/main/java/com/example/myapplication/components/templates/ProductCard.kt @@ -45,7 +45,6 @@ fun ProductCard(product: Product, onClickAction: () -> Unit) { Column (modifier = Modifier.padding(start = 15.dp, end = 15.dp)){ Text(text = product.name, fontSize = 24.sp, color = Color.Black) Text(text = product.price.toString() + " ₽", fontSize = 16.sp, color = Color.Black) - // ButtonNice(text = "Инфо" , color = myColor2, navController.navigate("main")) } } ButtonNice(text ="Добавить в корзину" , color = myColor1, onClickAction) diff --git a/app/src/main/java/com/example/myapplication/components/templates/ProductPage.kt b/app/src/main/java/com/example/myapplication/components/templates/ProductPage.kt index 986b409..074270f 100644 --- a/app/src/main/java/com/example/myapplication/components/templates/ProductPage.kt +++ b/app/src/main/java/com/example/myapplication/components/templates/ProductPage.kt @@ -37,7 +37,7 @@ fun ProductPage(name: String,info: String, price: Int, @DrawableRes imgId: Int, item{TextNice("Характеристики: ")} item{Text(info)} - item{ButtonNice("Добавить в корзину", Color(185, 20, 255, 255), onClickAction )} + item{ButtonNice("Добавить в корзину", myColor4, onClickAction )} } } diff --git a/app/src/main/java/com/example/myapplication/navigation/Navbar.kt b/app/src/main/java/com/example/myapplication/navigation/Navbar.kt index dce5221..9e18ec8 100644 --- a/app/src/main/java/com/example/myapplication/navigation/Navbar.kt +++ b/app/src/main/java/com/example/myapplication/navigation/Navbar.kt @@ -33,18 +33,22 @@ fun Navbar() { NavItem("cart", "Корзина", R.drawable.cart), ) val videocars = listOf( - Product(3, "MSI GeForce RTX 4090 VENTUS 3X OC", "Info", 210999, R.drawable.product1), - Product(4, "Palit GeForce GTX 1660 SUPER", "Info", 25999, R.drawable.product2), + Product(3, "MSI GeForce RTX 4090 VENTUS 3X OC", "Видеокарта MSI GeForce RTX 4090 VENTUS 3X OC создана для игровых ПК и профессиональных рабочих станций. Благодаря архитектуре NVIDIA Ada Lovelace она обеспечивает мощный вычислительный потенциал и плавность отображения динамичной графики без задержек. Тактовая частота процессора составляет 2230 МГц и способна увеличиваться до 2565 МГц при разгоне. Видеокарта оснащена 24 ГБ выделенной памяти стандарта GDDR6X.\n" + + "Вывод изображения на внешние мониторы может выполняться посредством 3 разъемов DisplayPort и 1 HDMI. Три вентилятора совместно с радиатором и тепловыми трубками быстро рассеивают тепло и поддерживают низкую температуру нагрева. Усиленная подсистема питания и отборные компоненты гарантируют стабильность работы MSI GeForce RTX 4090 VENTUS 3X ОС. Защитная пластина на тыловой стороне делает видеокарту устойчивой к деформации и механическим воздействиям. Фирменное приложение MSI Center позволяет выполнять мониторинг и настраивать параметры графического адаптера.", 210999, R.drawable.product1), + Product(4, "Palit GeForce GTX 1660 SUPER", "Видеокарта Palit GeForce GTX 1660 SUPER Gaming Pro [NE6166S018J9-1160A-1] представляет собой производительное решение в компактном корпусе, которое станет отличным выбором для компьютерных систем в миниатюрном корпусе. В основе графического ускорителя используется многоядерный процессор, работающий в широком частотном диапазоне, что вкупе с большим объемом встроенной памяти может обеспечить комфортную работу практически с любыми задачами. Максимальная температура ускорителя при этом может достигать отметки 93°C, для отвода тепла используется несколько осевых вентиляторов.\n" + + "Графический ускоритель Palit GeForce GTX 1660 SUPER Gaming Pro также отличается строгим дизайном, благодаря чему легко сможет дополнить собой практически любую сборку. Длина данной модели не превышает 235 мм, а толщина – 42 мм, благодаря чему для установки задействуется всего 2 отсека расширения. Для подключения к материнской плате используется интерфейс PCI-E 3.0. Для внешних мониторов на корпусе также предусмотрено несколько видов видеоразъемов.", 25999, R.drawable.product2), ) val processors = listOf( - Product(1,"Intel Celeron G5905 OEM","Info",4099, R.drawable.product3), - Product(2,"AMD Ryzen 5 4500 BOX","Info",9799, R.drawable.product4), + Product(1, "Intel Celeron G5905 OEM", "Процессор Intel Celeron G5905 представляет собой 2-ядерный чипсет начального уровня, подходящий для сборки домашнего или офисного компьютера. Созданная на базе архитектуры Intel Comet Lake-S модель использует 14-нанометровый техпроцесс, благодаря которому обеспечивается оптимальное сочетание производительности и энергопотребления. Для установки чипсета на материнскую плату используется популярный сокет LGA 1200. В работе устройство использует 2 производительных ядра, способных одновременно обрабатывать два вычислительных потока.\n" + + "Процессор Intel Celeron G5905 функционирует на фиксированной тактовой частоте 3.5 ГГц. В данной модели предусмотрено интегрированное графическое ядро Intel UHD Graphics 610, которому под силу справиться с обработкой нересурсоемкой графики и ее выводом на экран монитора.", 4099, R.drawable.product3), + Product(2, "AMD Ryzen 5 4500 BOX", "Шестиядерный процессор AMD Ryzen 5 4500 BOX основан на архитектуре Zen 2 и выполнен по техпроцессу TSMC 7FF. Устройство имеет базовую тактовую частоту 3.6 ГГц и максимальную 4.1 ГГц. Он также поддерживает технологии Simultaneous Multithreading (SMT) и Precision Boost, позволяющие эффективно использовать все 6 ядер процессора.\n" + + "AMD Ryzen 5 4500 BOX обладает высокими показателями производительности, особенно в многозадачных сценариях. Он также имеет низкое потребление энергии, что позволяет создавать энергоэффективные системы. Процессор поддерживает стандартную сокетную платформу AM4 и может быть установлен на совместимые материнские платы.", 9799, R.drawable.product4), ) Scaffold( bottomBar = { NavigationBar { - items.forEach{item -> + items.forEach { item -> NavigationBarItem( icon = { Image( @@ -53,7 +57,7 @@ fun Navbar() { modifier = Modifier.size(35.dp) ) }, - label={ Text(item.label) }, + label = { Text(item.label) }, onClick = { navController.navigate(item.route) }, @@ -73,16 +77,29 @@ fun Navbar() { composable("authorization") { Authorization(navController) } composable("registration") { Registration(navController) } - composable("main") { Main(navController) } + composable("main") { Main(navController, processors) } composable("category") { Сategory(navController) } - composable("cart") { Cart(navController)} + composable("cart") { Cart(navController, processors) } - composable("processors") { CatalogItems(navController,"Процессоры", processors)} - composable("videocards") { CatalogItems(navController,"Видеокарты", videocars)} + composable("processors") { CatalogItems(navController, "Процессоры", processors) } + composable("videocards") { CatalogItems(navController, "Видеокарты", videocars) } + + composable("addProduct") { addProduct(navController) } + + composable("product/{id}", + arguments = listOf(navArgument("id") { type = NavType.IntType }) + ) + { backStackEntry -> + backStackEntry.arguments?.let { + Product(it.getInt("id")).createProductPage { + } + } + } } } } + @Preview(name="Navbar") @Composable fun PreviewNavbar() { diff --git a/app/src/main/java/com/example/myapplication/styles/myColors.kt b/app/src/main/java/com/example/myapplication/styles/myColors.kt index e22c875..cd73481 100644 --- a/app/src/main/java/com/example/myapplication/styles/myColors.kt +++ b/app/src/main/java/com/example/myapplication/styles/myColors.kt @@ -1,6 +1,7 @@ import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color -val myColor1 = Color(68, 228, 208) -val myColor2 = Color(156, 39, 176, 255) - +val myColor1 = Color(0, 153, 153, 255) +val myColor2 = Color(255, 170, 0, 255) +val myColor3 = Color(103, 58, 183, 255) +val myColor4 = Color(185, 20, 255, 255)