This commit is contained in:
Ismailov_Rovshan 2023-11-24 21:48:37 +04:00
parent 861c47ab9b
commit 773046a752
10 changed files with 156 additions and 80 deletions

View File

@ -1,8 +0,0 @@
import androidx.compose.foundation.layout.Column
import androidx.compose.runtime.Composable
import androidx.navigation.NavController
@Composable
fun Authorization() {
}

View File

@ -1,4 +1,6 @@
import androidx.compose.foundation.BorderStroke 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.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
@ -6,6 +8,7 @@ import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
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.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
@ -16,45 +19,21 @@ import androidx.navigation.compose.rememberNavController
import com.example.myapplication.R import com.example.myapplication.R
@Composable @Composable
fun Cart(navController: NavController){ fun Cart(navController: NavController, products: List<Product> ){
LazyColumn (contentPadding = PaddingValues(horizontal = 16.dp, vertical = 8.dp)){
item {
TextNice("Корзина")
}
LazyColumn {
item { item {
Text( for (product in products){
text = "Корзина: ", product.ProductCardInCart()
fontSize = 28.sp, }
color = Color.Black, }
modifier = Modifier.padding(8.dp) item {
) Box(modifier = Modifier.padding(top = 50.dp)){
} ButtonNice(text = "Оплатить: 13 898 рублей ", color = myColor4)
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 рублей")
} }
} }
} }
}
@Preview(showBackground = true)
@Composable
fun CartPreview() {
val navController = rememberNavController()
Cart(navController = navController)
} }

View File

@ -25,7 +25,7 @@ import androidx.navigation.compose.rememberNavController
import com.example.myapplication.R import com.example.myapplication.R
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
fun Main(navController: NavController) { fun Main(navController: NavController, products: List<Product>) {
Column( Column(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
@ -45,15 +45,9 @@ fun Main(navController: NavController) {
color = Color.Black, color = Color.Black,
modifier = Modifier.padding(8.dp) modifier = Modifier.padding(8.dp)
) )
for (product in products){
//ProductCard("MSI GeForce RTX 4090 VENTUS 3X OC", 210999, R.drawable.product1, navController) product.createProductCard({navController.navigate("product/${product.id}")})
//ProductCard("Palit GeForce GTX 1660 SUPER", 25999, R.drawable.product2, navController) }
} }
} }
@Preview(showBackground = true)
@Composable
fun MainPreview() {
val navController = rememberNavController()
Main(navController = navController)
}

View File

@ -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)
}

View File

@ -1,9 +1,10 @@
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
@Composable @Composable
fun TextNice(text: String) { fun TextNice(text: String) {
Text(text, fontSize = 25.sp, color = Color.Black) Text(text, fontSize = 25.sp, color = Color.Black, fontWeight = FontWeight.Bold)
} }

View File

@ -1,17 +1,29 @@
import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.Image 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.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults 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.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
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.vector.ImageVector
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
@ -21,23 +33,35 @@ import com.example.myapplication.R
@Composable @Composable
fun CatalogItems (navController: NavController, title: String, products: List<Product>){ fun CatalogItems (navController: NavController, title: String, products: List<Product>){
LazyColumn {
LazyColumn (
contentPadding = PaddingValues(horizontal = 16.dp, vertical = 8.dp),
){
item { item {
Text( TextNice(title)
text = title,
fontSize = 28.sp,
color = Color.Black,
modifier = Modifier.padding(8.dp)
)
} }
item{ item{
for (product in products){ for (product in products){
product.createProductCard({}) product.createProductCard({navController.navigate("product/${product.id}")})
} }
} }
item { 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)
)
}
} }
} }
} }

View File

@ -45,7 +45,6 @@ fun ProductCard(product: Product, onClickAction: () -> Unit) {
Column (modifier = Modifier.padding(start = 15.dp, end = 15.dp)){ Column (modifier = Modifier.padding(start = 15.dp, end = 15.dp)){
Text(text = product.name, fontSize = 24.sp, color = Color.Black) Text(text = product.name, fontSize = 24.sp, color = Color.Black)
Text(text = product.price.toString() + "", fontSize = 16.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) ButtonNice(text ="Добавить в корзину" , color = myColor1, onClickAction)

View File

@ -37,7 +37,7 @@ fun ProductPage(name: String,info: String, price: Int, @DrawableRes imgId: Int,
item{TextNice("Характеристики: ")} item{TextNice("Характеристики: ")}
item{Text(info)} item{Text(info)}
item{ButtonNice("Добавить в корзину", Color(185, 20, 255, 255), onClickAction )} item{ButtonNice("Добавить в корзину", myColor4, onClickAction )}
} }
} }

View File

@ -33,18 +33,22 @@ fun Navbar() {
NavItem("cart", "Корзина", R.drawable.cart), NavItem("cart", "Корзина", R.drawable.cart),
) )
val videocars = listOf( val videocars = listOf(
Product(3, "MSI GeForce RTX 4090 VENTUS 3X OC", "Info", 210999, R.drawable.product1), Product(3, "MSI GeForce RTX 4090 VENTUS 3X OC", "Видеокарта MSI GeForce RTX 4090 VENTUS 3X OC создана для игровых ПК и профессиональных рабочих станций. Благодаря архитектуре NVIDIA Ada Lovelace она обеспечивает мощный вычислительный потенциал и плавность отображения динамичной графики без задержек. Тактовая частота процессора составляет 2230 МГц и способна увеличиваться до 2565 МГц при разгоне. Видеокарта оснащена 24 ГБ выделенной памяти стандарта GDDR6X.\n" +
Product(4, "Palit GeForce GTX 1660 SUPER", "Info", 25999, R.drawable.product2), "Вывод изображения на внешние мониторы может выполняться посредством 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( val processors = listOf(
Product(1,"Intel Celeron G5905 OEM","Info",4099, R.drawable.product3), Product(1, "Intel Celeron G5905 OEM", "Процессор Intel Celeron G5905 представляет собой 2-ядерный чипсет начального уровня, подходящий для сборки домашнего или офисного компьютера. Созданная на базе архитектуры Intel Comet Lake-S модель использует 14-нанометровый техпроцесс, благодаря которому обеспечивается оптимальное сочетание производительности и энергопотребления. Для установки чипсета на материнскую плату используется популярный сокет LGA 1200. В работе устройство использует 2 производительных ядра, способных одновременно обрабатывать два вычислительных потока.\n" +
Product(2,"AMD Ryzen 5 4500 BOX","Info",9799, R.drawable.product4), "Процессор 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( Scaffold(
bottomBar = { bottomBar = {
NavigationBar { NavigationBar {
items.forEach{item -> items.forEach { item ->
NavigationBarItem( NavigationBarItem(
icon = { icon = {
Image( Image(
@ -53,7 +57,7 @@ fun Navbar() {
modifier = Modifier.size(35.dp) modifier = Modifier.size(35.dp)
) )
}, },
label={ Text(item.label) }, label = { Text(item.label) },
onClick = { onClick = {
navController.navigate(item.route) navController.navigate(item.route)
}, },
@ -73,16 +77,29 @@ fun Navbar() {
composable("authorization") { Authorization(navController) } composable("authorization") { Authorization(navController) }
composable("registration") { Registration(navController) } composable("registration") { Registration(navController) }
composable("main") { Main(navController) } composable("main") { Main(navController, processors) }
composable("category") { Сategory(navController) } composable("category") { Сategory(navController) }
composable("cart") { Cart(navController)} composable("cart") { Cart(navController, processors) }
composable("processors") { CatalogItems(navController,"Процессоры", processors)} composable("processors") { CatalogItems(navController, "Процессоры", processors) }
composable("videocards") { CatalogItems(navController,"Видеокарты", videocars)} 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") @Preview(name="Navbar")
@Composable @Composable
fun PreviewNavbar() { fun PreviewNavbar() {

View File

@ -1,6 +1,7 @@
import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
val myColor1 = Color(68, 228, 208) val myColor1 = Color(0, 153, 153, 255)
val myColor2 = Color(156, 39, 176, 255) val myColor2 = Color(255, 170, 0, 255)
val myColor3 = Color(103, 58, 183, 255)
val myColor4 = Color(185, 20, 255, 255)