diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
new file mode 100644
index 0000000..fe65946
--- /dev/null
+++ b/.idea/deploymentTargetDropDown.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
index 0fc3113..69e8615 100644
--- a/.idea/kotlinc.xml
+++ b/.idea/kotlinc.xml
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 72c8b0a..a86b285 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -1,6 +1,7 @@
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
+ id("com.google.devtools.ksp")
}
android {
@@ -26,18 +27,19 @@ android {
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
}
}
+
compileOptions {
- sourceCompatibility = JavaVersion.VERSION_1_8
- targetCompatibility = JavaVersion.VERSION_1_8
+ sourceCompatibility = JavaVersion.VERSION_17
+ targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
- jvmTarget = "1.8"
+ jvmTarget = "17"
}
buildFeatures {
compose = true
}
composeOptions {
- kotlinCompilerExtensionVersion = "1.4.3"
+ kotlinCompilerExtensionVersion = "1.4.5"
}
packaging {
resources {
@@ -49,15 +51,24 @@ android {
dependencies {
implementation("androidx.core:core-ktx:1.9.0")
- implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2")
- implementation("androidx.activity:activity-compose:1.7.2")
- implementation(platform("androidx.compose:compose-bom:2023.03.00"))
+ implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.1")
+
+ implementation("androidx.activity:activity-compose:1.7.0")
implementation("androidx.navigation:navigation-compose:2.6.0")
+ implementation(platform("androidx.compose:compose-bom:2023.03.00"))
implementation("androidx.compose.ui:ui")
implementation("androidx.compose.ui:ui-graphics")
implementation("androidx.compose.ui:ui-tooling-preview")
implementation("androidx.compose.material3:material3")
- implementation("androidx.navigation:navigation-runtime-ktx:2.7.5")
+
+ // Room
+ val room_version = "2.5.2"
+ implementation("androidx.room:room-runtime:$room_version")
+ annotationProcessor("androidx.room:room-compiler:$room_version")
+ ksp("androidx.room:room-compiler:$room_version")
+ implementation("androidx.room:room-ktx:$room_version")
+ implementation("androidx.room:room-paging:$room_version")
+
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.5")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
diff --git a/app/src/main/java/com/example/myapplication/MainActivity.kt b/app/src/main/java/com/example/myapplication/MainActivity.kt
index 25f6232..deb7c9a 100644
--- a/app/src/main/java/com/example/myapplication/MainActivity.kt
+++ b/app/src/main/java/com/example/myapplication/MainActivity.kt
@@ -1,6 +1,5 @@
package com.example.myapplication
-import Navbar
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
@@ -11,6 +10,7 @@ import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
+import com.example.myapplication.navigation.Navbar
import com.example.myapplication.ui.theme.MyApplicationTheme
class MainActivity : ComponentActivity() {
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 72aad43..6d3faeb 100644
--- a/app/src/main/java/com/example/myapplication/components/Cart.kt
+++ b/app/src/main/java/com/example/myapplication/components/Cart.kt
@@ -1,25 +1,47 @@
-import androidx.compose.foundation.BorderStroke
+package com.example.myapplication.components
+
+
+import ButtonNice
+import TextNice
import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
-import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
-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.runtime.LaunchedEffect
+import androidx.compose.runtime.mutableStateListOf
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.tooling.preview.Preview
+
+import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
-import androidx.compose.ui.unit.sp
import androidx.navigation.NavController
-import androidx.navigation.compose.rememberNavController
-import com.example.myapplication.R
+import com.example.myapplication.components.funs.createProductCard
+import com.example.myapplication.database.AppDb
+import com.example.myapplication.database.entities.Product
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.withContext
+import myColor4
@Composable
-fun Cart(navController: NavController, products: List ){
+fun Cart(navController: NavController){
+
+ val context = LocalContext.current
+ val products = remember { mutableStateListOf() }
+ val sumPrice = remember { mutableStateOf(0.0) }
+
+ LaunchedEffect(Unit) {
+ withContext(Dispatchers.IO) {
+ products.clear()
+ sumPrice.value = 0.0;
+ AppDb.getInstance(context).userDao().getUserProductCartById(1).products.forEach {
+ sumPrice.value += it.price
+ products.add(it)
+ }
+ }
+ }
+
LazyColumn (contentPadding = PaddingValues(horizontal = 16.dp, vertical = 8.dp)){
item {
TextNice("Корзина")
@@ -27,13 +49,13 @@ fun Cart(navController: NavController, products: List ){
item {
for (product in products){
- product.ProductCardInCart()
+ createProductCard(product.name, product.price, product.img, { } )
}
}
+
item {
- Box(modifier = Modifier.padding(top = 50.dp)){
- ButtonNice(text = "Оплатить: 13 898 рублей ", color = myColor4)
- }
+ ButtonNice(text = "Оплатить: " + sumPrice.value.toString() + "Р", color = myColor4)
}
}
-}
\ 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 e42a9b2..d38395f 100644
--- a/app/src/main/java/com/example/myapplication/components/Main.kt
+++ b/app/src/main/java/com/example/myapplication/components/Main.kt
@@ -1,52 +1,90 @@
-import androidx.compose.foundation.BorderStroke
-import androidx.compose.foundation.background
+package com.example.myapplication.components
+
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
-import androidx.compose.foundation.shape.RoundedCornerShape
-import androidx.compose.material3.Button
-import androidx.compose.material3.ButtonDefaults
+
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.runtime.mutableStateListOf
+import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
-import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.text.style.TextAlign
-import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.navigation.NavController
-import androidx.navigation.compose.rememberNavController
-import com.example.myapplication.R
+import com.example.myapplication.database.entities.Product
+
+import androidx.compose.runtime.LaunchedEffect
+import com.example.myapplication.components.funs.createProductCard
+import com.example.myapplication.database.AppDb
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.withContext
+
+
@OptIn(ExperimentalMaterial3Api::class)
@Composable
-fun Main(navController: NavController, products: List) {
- Column(
+fun Main(navController: NavController, categoryId: Int) {
+
+
+ val context = LocalContext.current
+ val products = remember { mutableStateListOf() }
+
+ if (categoryId == 0){
+ LaunchedEffect(Unit) {
+ withContext(Dispatchers.IO) {
+ AppDb.getInstance(context).productDao().getAll().collect { data ->
+ products.clear()
+ data.forEach{
+ products.add(it)
+ }
+ }
+ }
+ }
+ } else {
+ LaunchedEffect(Unit) {
+ withContext(Dispatchers.IO) {
+ AppDb.getInstance(context).categoryDao().getProductsByCategory(categoryId).collect { data ->
+ products.clear()
+
+ data.forEach {
+ products.add(it)
+ }
+ }
+ }
+ }
+ }
+
+ LazyColumn(
modifier = Modifier
.fillMaxSize()
.padding(8.dp)
) {
- OutlinedTextField(
+ item { OutlinedTextField(
value = "",
onValueChange = { },
placeholder = { Text("Поиск товара") },
modifier = Modifier
.fillMaxWidth()
.padding(8.dp)
- )
- Text(
+ ) }
+ item {Text(
text = "Товары дня:",
fontSize = 28.sp,
color = Color.Black,
modifier = Modifier.padding(8.dp)
- )
- for (product in products){
- product.createProductCard({navController.navigate("product/${product.id}")})
+ )}
+
+ // createProductCard(productById!!.name, productById!!.price, productById!!.img, { } )
+
+ item{products.forEach {
+ createProductCard(it.name, it.price, it.img, { navController.navigate("product/" + it.productId) } )
+ }
}
}
}
diff --git a/app/src/main/java/com/example/myapplication/components/Registration.kt b/app/src/main/java/com/example/myapplication/components/Registration.kt
index 7d6e18c..a53b630 100644
--- a/app/src/main/java/com/example/myapplication/components/Registration.kt
+++ b/app/src/main/java/com/example/myapplication/components/Registration.kt
@@ -1,3 +1,7 @@
+package com.example.myapplication.components
+
+import Input
+import TextNice
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
@@ -58,9 +62,7 @@ fun Registration (navController: NavController){
@Preview(showBackground = true)
@Composable
fun RegistrationPreview() {
- // Создаем заглушку для NavController
val navController = rememberNavController()
- // Выводим превью компонента
Registration(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
index 4bda362..f821cbd 100644
--- a/app/src/main/java/com/example/myapplication/components/addProduct.kt
+++ b/app/src/main/java/com/example/myapplication/components/addProduct.kt
@@ -1,9 +1,18 @@
+package com.example.myapplication.components
+
+import ButtonNice
+import TextNice
+import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
+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.material3.Button
+import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Text
@@ -11,59 +20,81 @@ 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.res.painterResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.navigation.NavController
import androidx.navigation.compose.rememberNavController
+import com.example.myapplication.R
+import myColor2
+import myColor3
@OptIn(ExperimentalMaterial3Api::class)
@Composable
-fun addProduct(navController: NavController){
- Column(modifier = Modifier
- .fillMaxSize().padding(15.dp)
+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)
+ )
- 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)
- )
+ 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)
- ButtonNice(text = "Добавить", color = myColor2, onClickAction = {navController.navigate("category")})
- ButtonNice(text = "Отмена", color = Color.White, onClickAction = {navController.navigate("category")})
+ ) {
+ Image(
+ painter = painterResource(id = R.drawable.addphoto),
+ contentDescription = null,
+ modifier = Modifier.size(50.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/fun/funs.kt b/app/src/main/java/com/example/myapplication/components/fun/funs.kt
new file mode 100644
index 0000000..d015659
--- /dev/null
+++ b/app/src/main/java/com/example/myapplication/components/fun/funs.kt
@@ -0,0 +1,76 @@
+package com.example.myapplication.components.funs
+
+import ButtonNice
+import TextNice
+import android.graphics.Bitmap
+import androidx.annotation.DrawableRes
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.aspectRatio
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.lazy.LazyColumn
+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.asImageBitmap
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import myColor1
+import myColor4
+
+@Composable
+fun createProductCard(name: String, price: Double, img: Bitmap, onClickAction: () -> Unit){
+ Column () {
+ Row {
+ Image(
+ bitmap = img.asImageBitmap(),
+ contentDescription = null,
+ modifier = Modifier.size(150.dp)
+ )
+
+ Column (modifier = Modifier.padding(start = 15.dp, end = 15.dp)){
+ Text(name, fontSize = 24.sp, color = Color.Black)
+ Text(price.toString() + " ₽", fontSize = 16.sp, color = Color.Black)
+ ButtonNice("Инфо: " , Color.White, onClickAction)
+ }
+ }
+ ButtonNice("Добавить в корзину" , myColor1, onClickAction)
+ }
+}
+
+@Composable
+fun createProductPage(name: String,info: String,price: Int, @DrawableRes imgId: Int, onClickAction: () -> Unit){
+ LazyColumn (modifier = Modifier.fillMaxSize().padding(10.dp)) {
+
+ item{
+ Box(
+ modifier = Modifier.padding(bottom = 10.dp).fillMaxWidth(),
+ contentAlignment = Alignment.Center
+ ){
+ TextNice(name)
+ }
+ }
+
+ item {
+ Image(
+ painter = painterResource(id = imgId),
+ contentDescription = null,
+ modifier = Modifier
+ .size(400.dp)
+ .aspectRatio(1f)
+ )
+ }
+
+ item{TextNice("Характеристики: ")}
+ item{Text(info) }
+ item{ButtonNice("Добавить в корзину", myColor4, onClickAction )}
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/myapplication/components/templates/CatalogItem.kt b/app/src/main/java/com/example/myapplication/components/templates/CatalogItem.kt
index 6ce26f7..ed7399a 100644
--- a/app/src/main/java/com/example/myapplication/components/templates/CatalogItem.kt
+++ b/app/src/main/java/com/example/myapplication/components/templates/CatalogItem.kt
@@ -1,3 +1,6 @@
+package com.example.myapplication.components.templates
+
+import ButtonNice
import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.Color
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 7365934..bbe3cb9 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,38 +1,27 @@
-import androidx.compose.foundation.BorderStroke
+package com.example.myapplication.components.templates
+
+import TextNice
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
import androidx.navigation.NavController
-import androidx.navigation.compose.rememberNavController
import com.example.myapplication.R
+import com.example.myapplication.components.funs.createProductCard
+import com.example.myapplication.database.entities.Product
+import com.example.myapplication.product.ProductOld
+import myColor3
@Composable
-fun CatalogItems (navController: NavController, title: String, products: List){
+fun CatalogItems (navController: NavController, title: String, products: MutableList){
LazyColumn (
contentPadding = PaddingValues(horizontal = 16.dp, vertical = 8.dp),
@@ -42,12 +31,12 @@ fun CatalogItems (navController: NavController, title: String, products: List Unit) {
+fun ProductCard(product: ProductOld, onClickAction: () -> Unit) {
Column (modifier = Modifier.padding(top = 20.dp, start = 10.dp, end=10.dp)) {
Row {
Image(
diff --git a/app/src/main/java/com/example/myapplication/components/templates/ProductCardInCart.kt b/app/src/main/java/com/example/myapplication/components/templates/ProductCardInCart.kt
index bca8c85..ba36960 100644
--- a/app/src/main/java/com/example/myapplication/components/templates/ProductCardInCart.kt
+++ b/app/src/main/java/com/example/myapplication/components/templates/ProductCardInCart.kt
@@ -1,3 +1,6 @@
+package com.example.myapplication.components.templates
+
+import TextNice
import androidx.annotation.DrawableRes
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.Image
diff --git a/app/src/main/java/com/example/myapplication/components/templates/ProductForPage.kt b/app/src/main/java/com/example/myapplication/components/templates/ProductForPage.kt
new file mode 100644
index 0000000..58dc324
--- /dev/null
+++ b/app/src/main/java/com/example/myapplication/components/templates/ProductForPage.kt
@@ -0,0 +1,30 @@
+package com.example.myapplication.components.templates
+
+
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.ui.platform.LocalContext
+import com.example.myapplication.database.AppDb
+import com.example.myapplication.database.entities.Product
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.withContext
+
+@Composable
+fun ProductForPage(id: Int) {
+ val context = LocalContext.current
+ val (product, setProduct) = remember { mutableStateOf(null) } //спросить
+
+ LaunchedEffect(Unit) {
+ withContext(Dispatchers.IO){
+ AppDb.getInstance(context).productDao().getById(id).collect {
+ setProduct(it)
+ }
+ }
+ }
+
+ if (product != null){
+ ProductPage(product!!.name, product!!.info, product!!.price, product!!.img, { } )
+ }
+}
\ No newline at end of file
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 074270f..15cf851 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
@@ -1,3 +1,8 @@
+package com.example.myapplication.components.templates
+
+import ButtonNice
+import TextNice
+import android.graphics.Bitmap
import androidx.annotation.DrawableRes
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
@@ -11,15 +16,17 @@ import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.navigation.NavController
import androidx.navigation.compose.rememberNavController
import com.example.myapplication.R
+import myColor4
@Composable
-fun ProductPage(name: String,info: String, price: Int, @DrawableRes imgId: Int, onClickAction: () -> Unit){
+fun ProductPage(name: String, info: String, price: Double, img: Bitmap, onClickAction: () -> Unit){
LazyColumn (modifier = Modifier.fillMaxSize().padding(10.dp)) {
item{
@@ -27,33 +34,16 @@ fun ProductPage(name: String,info: String, price: Int, @DrawableRes imgId: Int,
}
item {
+
Image(
- painter = painterResource(id = imgId),
- contentDescription = null,
- modifier = Modifier
- .size(400.dp)
- .aspectRatio(1f)
- )}
+ bitmap = img.asImageBitmap(),
+ contentDescription = null,
+ modifier = Modifier.size(150.dp)
+ )
+ }
item{TextNice("Характеристики: ")}
item{Text(info)}
item{ButtonNice("Добавить в корзину", myColor4, onClickAction )}
}
-}
-
-@Preview
-@Composable
-fun ProductPagePreview(){
- val navController = rememberNavController()
- ProductPage("MSI GeForce RTX 4090 VENTUS 3X OC" ,"Общая информация: Дата выхода на рынок 2022 г.\n" +
- "Основные характеристики: Подбор в один клик с трассировкой лучей, для игр в 4K, для рендеринга, профессиональная\n" +
- "Интерфейс: PCI Express x16 4.0\n" +
- "Производитель графического процессора: NVIDIA\n" +
- "Микроархитектура: NVIDIA Ada Lovelace\n" +
- "Кодовое имя чипа: AD102\n" +
- "Графический процессор: GeForce RTX 4090\n" +
- "«Разогнанная» версия: Нет\n" +
- "Трассировка лучей: Да\n" +
- "Защита от майнинга (LHR): Нет\n" +
- "Внешняя видеокарта: Нет",15000, R.drawable.product1, onClickAction = { navController.navigate("main") })
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/myapplication/components/Сategory.kt b/app/src/main/java/com/example/myapplication/components/Сategory.kt
index bddfed5..8f3d5bc 100644
--- a/app/src/main/java/com/example/myapplication/components/Сategory.kt
+++ b/app/src/main/java/com/example/myapplication/components/Сategory.kt
@@ -1,28 +1,75 @@
+package com.example.myapplication.components
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.lazy.LazyColumn
+import androidx.compose.material3.ExperimentalMaterial3Api
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.tooling.preview.Preview
+import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import androidx.navigation.NavController
+import androidx.navigation.compose.rememberNavController
+import com.example.myapplication.components.templates.CatalogItems
+import com.example.myapplication.components.templates.CategoryItem
+import com.example.myapplication.database.AppDb
+import com.example.myapplication.database.entities.Category
+import com.example.myapplication.database.entities.Product
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.withContext
+
@Composable
-fun Сategory(navController: NavController){
- Column(modifier = Modifier.fillMaxWidth().padding(start = 10.dp, end = 10.dp, top = 20.dp, ),
+fun Сategory(navController: NavController) {
+ Column(
+ modifier = Modifier.fillMaxWidth().padding(start = 10.dp, end = 10.dp, top = 20.dp,),
horizontalAlignment = Alignment.End
- ){
+ ) {
- CategoryItem(text = "Процессоры", { navController.navigate("processors") })
- CategoryItem(text = "Видеокарты", { navController.navigate("videocards") })
+ val context = LocalContext.current
+ val categories = remember { mutableStateListOf() }
+
+ LaunchedEffect(Unit) {
+ withContext(Dispatchers.IO) {
+ AppDb.getInstance(context).categoryDao().getAll().collect { data ->
+ categories.clear()
+ data.forEach {
+ categories.add(it)
+ }
+ }
+ }
+ }
+
+ categories.forEach{
+ CategoryItem(it.name, { navController.navigate("main/" + it.id)})
+ }
- CategoryItem(text = "ПЗУ", { navController.navigate("processors") })
- CategoryItem(text = "ОЗУ", { navController.navigate("processors") })
}
}
-@Preview(showBackground = true)
@Composable
-fun CatalogPreview() {
-}
\ No newline at end of file
+fun myFun(categoryId: Int, title: String){
+
+ val navController = rememberNavController()
+ val context = LocalContext.current
+ val products = remember { mutableStateListOf() }
+
+ LaunchedEffect(Unit) {
+ withContext(Dispatchers.IO) {
+ AppDb.getInstance(context).categoryDao().getProductsByCategory(categoryId).collect { data ->
+ products.clear()
+
+ data.forEach {
+ products.add(it)
+ }
+ }
+ }
+ }
+
+ CatalogItems(navController, title, products )
+}
+
diff --git a/app/src/main/java/com/example/myapplication/database/AppDb.kt b/app/src/main/java/com/example/myapplication/database/AppDb.kt
new file mode 100644
index 0000000..8345ada
--- /dev/null
+++ b/app/src/main/java/com/example/myapplication/database/AppDb.kt
@@ -0,0 +1,125 @@
+package com.example.myapplication.database
+
+import android.content.Context
+import android.graphics.Bitmap
+import android.graphics.BitmapFactory
+import androidx.room.Database
+import androidx.room.Room
+import androidx.room.RoomDatabase
+import androidx.room.TypeConverters
+import androidx.sqlite.db.SupportSQLiteDatabase
+import com.example.myapplication.R
+import com.example.myapplication.database.dao.CategoryDao
+import com.example.myapplication.database.dao.ProductDao
+import com.example.myapplication.database.dao.UserDao
+import com.example.myapplication.database.entities.Category
+import com.example.myapplication.database.entities.Converters
+import com.example.myapplication.database.entities.Product
+
+import com.example.myapplication.database.entities.User
+import com.example.myapplication.database.entities.UserProductCart
+
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+
+@Database(entities = [User::class, Product::class, Category:: class, UserProductCart::class], version = 1, exportSchema = false)
+@TypeConverters(Converters::class)
+abstract class AppDb: RoomDatabase(){
+ abstract fun userDao(): UserDao
+ abstract fun productDao(): ProductDao
+ abstract fun categoryDao(): CategoryDao
+ companion object {
+ private const val DB_NAME: String = "myApp2.db"
+
+ @Volatile
+ private var INSTANCE: AppDb? = null
+ private suspend fun populateDatabase(context: Context) {
+ INSTANCE?.let { database ->
+
+ val categoryDao = database.categoryDao()
+
+ categoryDao.insert(Category(1, "Видеокарты"))
+ categoryDao.insert(Category(2, "Процессоры"))
+ categoryDao.insert(Category(3, "Оперативная память"))
+ categoryDao.insert(Category(4, "Твердотельные накопители"))
+
+ val productDao = database.productDao()
+
+ val img1: Bitmap = BitmapFactory.decodeResource(context.resources, R.drawable.product1)
+ val img2: Bitmap = BitmapFactory.decodeResource(context.resources, R.drawable.product2)
+ val img3: Bitmap = BitmapFactory.decodeResource(context.resources, R.drawable.product3)
+ val img4: Bitmap = BitmapFactory.decodeResource(context.resources, R.drawable.product4)
+ val img5: Bitmap = BitmapFactory.decodeResource(context.resources, R.drawable.product5)
+ val img6: Bitmap = BitmapFactory.decodeResource(context.resources, R.drawable.product6)
+ val img7: Bitmap = BitmapFactory.decodeResource(context.resources, R.drawable.product7)
+ val img8: Bitmap = BitmapFactory.decodeResource(context.resources, R.drawable.product8)
+
+ productDao.insert(Product(1, "MSI GeForce RTX 4090 VENTUS 3X OC",
+ "Информацио о товаре MSI GeForce RTX 4090 VENTUS 3X OC ",
+ 210999.0, img1, 1
+ ))
+
+ productDao.insert(Product(2, "Palit GeForce GTX 1660 SUPER",
+ "Информацио о товаре Palit GeForce GTX 1660 SUPER ",
+ 25999.0, img2, 1
+ ))
+
+ productDao.insert(Product(3, "Intel Celeron G5905 OEM",
+ "Информацио о товаре Intel Celeron G5905 OEM ",
+ 25999.0, img3, 2
+ ))
+
+
+ productDao.insert(Product(4, "AMD Ryzen 5 4500 BOX",
+ "Информацио о товаре Intel Celeron G5905 OEM",
+ 9799.0, img4, 2
+ ))
+
+ productDao.insert(Product(5, "Kingston FURY Beast Black",
+ "Информацио о товаре Kingston FURY Beast Black",
+ 4499.0, img5, 3
+ ))
+
+ productDao.insert(Product(6, "ADATA XPG SPECTRIX D41 RGB",
+ "Информацио о товаре ADATA XPG SPECTRIX D41 RGB",
+ 4599.0, img6, 3
+ ))
+
+ productDao.insert(Product(7, "ADATA SU650",
+ "Информацио о товаре ADATA SU650",
+ 1550.0, img7, 4
+ ))
+ productDao.insert(Product(8, "Smartbuy Revival 3",
+ "Информацио о товаре Smartbuy Revival 3",
+ 1250.0, img8, 4
+ ))
+
+ val userDao = database.userDao()
+ userDao.insert(User(1, "Иванов И.И", "ivanov"))
+ database.userDao().addProductCart(UserProductCart(1, 1))
+ database.userDao().addProductCart(UserProductCart(1, 3))
+ //database.userDao().addProductCart(UserProductCart(1, 2))
+ }
+ }
+ fun getInstance(appContext: Context): AppDb {
+ return INSTANCE ?: synchronized(this) {
+ Room.databaseBuilder(
+ appContext,
+ AppDb::class.java,
+ DB_NAME
+ )
+ .addCallback(object : Callback() {
+ override fun onCreate(db: SupportSQLiteDatabase) {
+ super.onCreate(db)
+ CoroutineScope(Dispatchers.IO).launch {
+ populateDatabase(appContext)
+ }
+ }
+ })
+ .build()
+ .also { INSTANCE = it }
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/example/myapplication/database/dao/CategoryDao.kt b/app/src/main/java/com/example/myapplication/database/dao/CategoryDao.kt
new file mode 100644
index 0000000..a901463
--- /dev/null
+++ b/app/src/main/java/com/example/myapplication/database/dao/CategoryDao.kt
@@ -0,0 +1,19 @@
+package com.example.myapplication.database.dao
+
+import androidx.room.Dao
+import androidx.room.Insert
+import androidx.room.Query
+import com.example.myapplication.database.entities.Category
+import com.example.myapplication.database.entities.Product
+import kotlinx.coroutines.flow.Flow
+
+@Dao
+interface CategoryDao {
+ @Query("select * from categories")
+ fun getAll(): Flow>
+ @Insert
+ suspend fun insert(category: Category)
+
+ @Query("select * from products where category_id = :categoryId")
+ fun getProductsByCategory(categoryId: Int): Flow>
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/myapplication/database/dao/UserDao.kt b/app/src/main/java/com/example/myapplication/database/dao/UserDao.kt
new file mode 100644
index 0000000..952fe09
--- /dev/null
+++ b/app/src/main/java/com/example/myapplication/database/dao/UserDao.kt
@@ -0,0 +1,27 @@
+package com.example.myapplication.database.dao;
+
+import androidx.room.Dao
+import androidx.room.Insert
+import androidx.room.Query
+import com.example.myapplication.database.entities.User
+import com.example.myapplication.database.entities.UserProductCart
+import com.example.myapplication.database.entities.UserWithCartProduct
+import kotlinx.coroutines.flow.Flow
+
+@Dao
+interface UserDao {
+ @Query("select * from users")
+ fun getAll(): Flow>
+
+ @Query("select * from users where users.userId = :id")
+ fun getById(id: Int): User
+
+ @Insert
+ suspend fun insert(user: User)
+
+ @Query("select * from users where users.userId = :id")
+ fun getUserProductCartById(id: Int): UserWithCartProduct
+
+ @Insert
+ suspend fun addProductCart(userProduct: UserProductCart)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/myapplication/database/entities/Category.kt b/app/src/main/java/com/example/myapplication/database/entities/Category.kt
new file mode 100644
index 0000000..1c66f1e
--- /dev/null
+++ b/app/src/main/java/com/example/myapplication/database/entities/Category.kt
@@ -0,0 +1,26 @@
+package com.example.myapplication.database.entities
+
+import androidx.room.ColumnInfo
+import androidx.room.Entity
+import androidx.room.PrimaryKey
+
+@Entity(tableName = "categories")
+data class Category(
+ @PrimaryKey(autoGenerate = true)
+ var id: Int?,
+ @ColumnInfo(name="name")
+ val name: String
+) {
+ override fun equals(other: Any?): Boolean {
+ if (this === other) return true
+ if (javaClass != other?.javaClass) return false
+ other as Category
+ if (id != other.id) return false
+ return true
+ }
+
+
+ override fun hashCode(): Int {
+ return id ?: -1
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/myapplication/database/entities/Converters.kt b/app/src/main/java/com/example/myapplication/database/entities/Converters.kt
new file mode 100644
index 0000000..73d6b65
--- /dev/null
+++ b/app/src/main/java/com/example/myapplication/database/entities/Converters.kt
@@ -0,0 +1,19 @@
+package com.example.myapplication.database.entities
+
+import android.graphics.Bitmap
+import android.graphics.BitmapFactory
+import androidx.room.TypeConverter
+import java.io.ByteArrayOutputStream
+
+class Converters {
+ @TypeConverter
+ fun fromBitmap(bitmap: Bitmap) : ByteArray {
+ val outputStream = ByteArrayOutputStream();
+ bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream)
+ return outputStream.toByteArray()
+ }
+ @TypeConverter
+ fun toBitmap(byteArray: ByteArray): Bitmap {
+ return BitmapFactory.decodeByteArray(byteArray, 0, byteArray.size)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/myapplication/database/entities/Product.kt b/app/src/main/java/com/example/myapplication/database/entities/Product.kt
new file mode 100644
index 0000000..444a0f6
--- /dev/null
+++ b/app/src/main/java/com/example/myapplication/database/entities/Product.kt
@@ -0,0 +1,59 @@
+package com.example.myapplication.database.entities
+
+import android.graphics.Bitmap
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.aspectRatio
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import androidx.room.ColumnInfo
+import androidx.room.Entity
+import androidx.room.ForeignKey
+import androidx.room.PrimaryKey
+
+@Entity(
+ tableName = "products",
+ foreignKeys = [
+ ForeignKey(
+ entity = Category::class,
+ parentColumns = ["id"],
+ childColumns = ["category_id"],
+ onDelete = ForeignKey.RESTRICT,
+ onUpdate = ForeignKey.RESTRICT
+ )
+ ]
+)
+data class Product(
+ @PrimaryKey(autoGenerate = true)
+ var productId: Int?,
+ @ColumnInfo(name="name")
+ val name: String,
+ @ColumnInfo(name="info")
+ val info: String,
+ @ColumnInfo(name="price")
+ val price: Double,
+ @ColumnInfo(name="img")
+ val img: Bitmap,
+ @ColumnInfo(name="category_id")
+ val categoryId: Int
+){
+ override fun equals(other: Any?): Boolean {
+ if (this === other) return true
+ if (javaClass != other?.javaClass) return false
+ other as Product
+ if (productId != other.productId) return false
+ return true
+ }
+ override fun hashCode(): Int {
+ return productId ?: -1
+ }
+
+}
diff --git a/app/src/main/java/com/example/myapplication/database/entities/User.kt b/app/src/main/java/com/example/myapplication/database/entities/User.kt
new file mode 100644
index 0000000..abbd79e
--- /dev/null
+++ b/app/src/main/java/com/example/myapplication/database/entities/User.kt
@@ -0,0 +1,27 @@
+package com.example.myapplication.database.entities
+
+import androidx.room.ColumnInfo
+import androidx.room.Entity
+import androidx.room.PrimaryKey
+
+@Entity(tableName = "users")
+data class User(
+ @PrimaryKey(autoGenerate = true)
+ var userId: Int?,
+ @ColumnInfo(name="name")
+ val name: String,
+ @ColumnInfo(name="login")
+ val login: String
+) {
+ override fun equals(other: Any?): Boolean {
+ if (this === other) return true
+ if (javaClass != other?.javaClass) return false
+ other as User
+ if (userId != other.userId) return false
+ return true
+ }
+
+ override fun hashCode(): Int {
+ return userId ?: -1
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/myapplication/database/entities/UserWithCartProduct.kt b/app/src/main/java/com/example/myapplication/database/entities/UserWithCartProduct.kt
new file mode 100644
index 0000000..9661e52
--- /dev/null
+++ b/app/src/main/java/com/example/myapplication/database/entities/UserWithCartProduct.kt
@@ -0,0 +1,15 @@
+package com.example.myapplication.database.entities
+
+import androidx.room.Embedded
+import androidx.room.Junction
+import androidx.room.Relation
+
+data class UserWithCartProduct (
+ @Embedded val user : User,
+ @Relation(
+ parentColumn = "userId",
+ entityColumn = "productId",
+ associateBy = Junction(UserProductCart::class)
+ )
+ val products : List
+)
\ No newline at end of file
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 9e18ec8..f0dcd17 100644
--- a/app/src/main/java/com/example/myapplication/navigation/Navbar.kt
+++ b/app/src/main/java/com/example/myapplication/navigation/Navbar.kt
@@ -1,3 +1,5 @@
+package com.example.myapplication.navigation
+
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
@@ -20,7 +22,13 @@ import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import androidx.navigation.navArgument
import com.example.myapplication.R
-import com.example.myapplication.navigation.NavItem
+import com.example.myapplication.components.Authorization
+import com.example.myapplication.components.Cart
+import com.example.myapplication.components.Main
+import com.example.myapplication.components.Registration
+import com.example.myapplication.components.myFun
+import com.example.myapplication.components.templates.ProductForPage
+import com.example.myapplication.components.Сategory
import com.example.myapplication.ui.theme.MyApplicationTheme
@OptIn(ExperimentalMaterial3Api::class)
@@ -28,22 +36,22 @@ import com.example.myapplication.ui.theme.MyApplicationTheme
fun Navbar() {
val navController = rememberNavController()
val items = listOf(
- NavItem("main", "Главная", R.drawable.home),
+ NavItem("main/0", "Главная", R.drawable.home),
NavItem("category", "Каталог", R.drawable.search),
NavItem("cart", "Корзина", R.drawable.cart),
)
- val videocars = listOf(
- 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", "Процессор 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),
- )
+// val videocars = listOf(
+// 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", "Процессор 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 = {
@@ -77,24 +85,27 @@ fun Navbar() {
composable("authorization") { Authorization(navController) }
composable("registration") { Registration(navController) }
- composable("main") { Main(navController, processors) }
- composable("category") { Сategory(navController) }
- composable("cart") { Cart(navController, processors) }
+ //composable("main") { Main(navController) }
- composable("processors") { CatalogItems(navController, "Процессоры", processors) }
- composable("videocards") { CatalogItems(navController, "Видеокарты", videocars) }
-
- composable("addProduct") { addProduct(navController) }
-
- composable("product/{id}",
+ composable(
+ "main/{id}",
arguments = listOf(navArgument("id") { type = NavType.IntType })
- )
- { backStackEntry ->
+ ) { backStackEntry ->
+
backStackEntry.arguments?.let {
- Product(it.getInt("id")).createProductPage {
- }
+ Main(navController, it.getInt("id"))
}
}
+
+ composable("category") { Сategory(navController) }
+ composable("cart") { Cart(navController) }
+
+ composable(
+ "product/{id}",
+ arguments = listOf(navArgument("id") { type = NavType.IntType })
+ ) { backStackEntry ->
+ backStackEntry.arguments?.let { ProductForPage(it.getInt("id")) }
+ }
}
}
}
@@ -104,7 +115,6 @@ fun Navbar() {
@Composable
fun PreviewNavbar() {
MyApplicationTheme {
- // A surface container using the 'background' color from the theme
Surface(modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background) {
Navbar()
}
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 cd73481..23c9208 100644
--- a/app/src/main/java/com/example/myapplication/styles/myColors.kt
+++ b/app/src/main/java/com/example/myapplication/styles/myColors.kt
@@ -1,4 +1,3 @@
-import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.Color
val myColor1 = Color(0, 153, 153, 255)
diff --git a/build.gradle.kts b/build.gradle.kts
index 9861456..bd1eb8a 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -2,4 +2,5 @@
plugins {
id("com.android.application") version "8.1.1" apply false
id("org.jetbrains.kotlin.android") version "1.8.10" apply false
+ id("com.google.devtools.ksp") version "1.8.20-1.0.11" apply false
}
\ No newline at end of file