likedSneakers
This commit is contained in:
parent
15b372db55
commit
86c9b9fd23
@ -1,6 +1,7 @@
|
||||
package com.example.testktor.ViewModel
|
||||
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateMapOf
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
@ -17,11 +18,11 @@ class MainViewModel : ViewModel() {
|
||||
var sneakersCategories by mutableStateOf(SneakerCategoryResponse(emptyList(), emptyList()))
|
||||
private set
|
||||
|
||||
private val client = HttpClient(Android)
|
||||
|
||||
// var selectedCategory by mutableStateOf<Int?>(null)
|
||||
var selectedCategory by mutableStateOf<Category?>(null)
|
||||
|
||||
var likedSneakers = mutableStateMapOf<Int, Boolean>()
|
||||
|
||||
private val client = HttpClient(Android)
|
||||
|
||||
init {
|
||||
viewModelScope.launch {
|
||||
@ -29,6 +30,14 @@ class MainViewModel : ViewModel() {
|
||||
}
|
||||
}
|
||||
|
||||
fun toggleLike(sneakerId: Int) {
|
||||
likedSneakers[sneakerId] = !(likedSneakers[sneakerId] ?: false)
|
||||
}
|
||||
|
||||
fun isLiked(sneakerId: Int): Boolean {
|
||||
return likedSneakers[sneakerId] ?: false
|
||||
}
|
||||
|
||||
fun refreshData() {
|
||||
viewModelScope.launch {
|
||||
sneakersCategories = getSneakers(client) ?: SneakerCategoryResponse(emptyList(), emptyList())
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.example.testktor.method.main
|
||||
|
||||
import android.util.Log
|
||||
import androidx.compose.foundation.Canvas
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Box
|
||||
@ -48,7 +49,7 @@ fun TopWriteNavigationBar(navController: NavController, message: String, viewMod
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun SneakerCategorySelection(sneakers: List<SneakerShop>) {
|
||||
fun SneakerCategorySelection(sneakers: List<SneakerShop>, viewModel: MainViewModel) {
|
||||
Column(modifier = Modifier.fillMaxWidth()) {
|
||||
sneakers.chunked(2).forEach { sneakerPair ->
|
||||
Row(
|
||||
@ -60,8 +61,13 @@ fun SneakerCategorySelection(sneakers: List<SneakerShop>) {
|
||||
sneakerPair.forEach { sneakerShop ->
|
||||
SneakerButton(
|
||||
sneakerShop = sneakerShop,
|
||||
onClick = { /* TODO */ },
|
||||
onFavoriteClick = { /* TODO */ }
|
||||
isLiked = viewModel.isLiked(sneakerShop.sneaker.id),
|
||||
onClick = { /* TODO: Действие кнопки */ },
|
||||
onFavoriteClick = {
|
||||
viewModel.toggleLike(sneakerShop.sneaker.id)
|
||||
val likedCount = viewModel.likedSneakers.values.count { it }
|
||||
Log.d("SneakerLike", "Лайкнуто кроссовок: $likedCount")
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.example.testktor.method.main
|
||||
|
||||
import android.util.Log
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
@ -56,6 +57,7 @@ import coil.compose.AsyncImage
|
||||
import com.example.testktor.Category
|
||||
import com.example.testktor.R
|
||||
import com.example.testktor.SneakerShop
|
||||
import com.example.testktor.ViewModel.MainViewModel
|
||||
|
||||
@Preview(showBackground = true)
|
||||
@Composable
|
||||
@ -310,7 +312,7 @@ fun CategoryButton(category: Category, isSelected: Boolean, onClick: () -> Unit)
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun SneakerSelection(sneakers: List<SneakerShop>) {
|
||||
fun SneakerSelection(sneakers: List<SneakerShop>, viewModel: MainViewModel) {
|
||||
Row(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
horizontalArrangement = Arrangement.SpaceEvenly
|
||||
@ -318,18 +320,26 @@ fun SneakerSelection(sneakers: List<SneakerShop>) {
|
||||
sneakers.take(2).forEachIndexed { index ,sneakerShop ->
|
||||
SneakerButton(
|
||||
sneakerShop = sneakerShop,
|
||||
onClick = { /* TODO: Действие кнопки */ },
|
||||
onFavoriteClick = { /* TODO: Действие кнопки */ }
|
||||
isLiked = viewModel.isLiked(sneakerShop.sneaker.id),
|
||||
onClick = { /* переход */ },
|
||||
// onFavoriteClick = { viewModel.toggleLike(sneakerShop.sneaker.id) }
|
||||
onFavoriteClick = {
|
||||
viewModel.toggleLike(sneakerShop.sneaker.id)
|
||||
val likedCount = viewModel.likedSneakers.values.count { it }
|
||||
Log.d("SneakerLike", "Лайкнуто кроссовок: $likedCount")
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun SneakerButton(sneakerShop: SneakerShop, onClick: () -> Unit, onFavoriteClick: () -> Unit) {
|
||||
val cost = "₽${sneakerShop.sneaker.cost}"
|
||||
|
||||
var isLiked by remember { mutableStateOf(false) }
|
||||
fun SneakerButton(
|
||||
sneakerShop: SneakerShop,
|
||||
isLiked: Boolean,
|
||||
onClick: () -> Unit,
|
||||
onFavoriteClick: () -> Unit
|
||||
) {
|
||||
var isAddedToCart by remember { mutableStateOf(false) }
|
||||
|
||||
Box(modifier = Modifier.padding(8.dp)) {
|
||||
@ -352,19 +362,19 @@ fun SneakerButton(sneakerShop: SneakerShop, onClick: () -> Unit, onFavoriteClick
|
||||
.height(90.dp)
|
||||
)
|
||||
Text(text = sneakerShop.sneaker.name, fontSize = 20.sp, color = Color.DarkGray)
|
||||
Text(text = cost, fontSize = 15.sp, color = Color.Black)
|
||||
Text(text = "₽${sneakerShop.sneaker.cost}", fontSize = 15.sp, color = Color.Black)
|
||||
}
|
||||
}
|
||||
|
||||
IconButton(
|
||||
onClick = {isLiked = !isLiked},
|
||||
onClick = onFavoriteClick,
|
||||
modifier = Modifier
|
||||
.align(Alignment.TopStart)
|
||||
.size(28.dp)
|
||||
.padding(4.dp)
|
||||
) {
|
||||
val iconRes = if (sneakerShop.likeOrNot) Icons.Default.Favorite else Icons.Default.FavoriteBorder
|
||||
Icon(imageVector = iconRes, contentDescription = "Favourite", tint = Color.Red)
|
||||
val icon = if (isLiked) Icons.Default.Favorite else Icons.Default.FavoriteBorder
|
||||
Icon(imageVector = icon, contentDescription = "Favourite", tint = Color.Red)
|
||||
}
|
||||
|
||||
IconButton(
|
||||
@ -377,7 +387,7 @@ fun SneakerButton(sneakerShop: SneakerShop, onClick: () -> Unit, onFavoriteClick
|
||||
.padding(4.dp)
|
||||
) {
|
||||
val iconRes = if (isAddedToCart) Icons.Default.ShoppingCart else Icons.Default.Add
|
||||
Icon(imageVector = iconRes, contentDescription = "Favourite", tint = Color.Cyan)
|
||||
Icon(imageVector = iconRes, contentDescription = "Cart", tint = Color.Cyan)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -63,6 +63,6 @@ fun CategorySneakersContent(
|
||||
}
|
||||
)
|
||||
|
||||
SneakerCategorySelection(sneakers)
|
||||
SneakerCategorySelection(sneakers, viewModel)
|
||||
}
|
||||
}
|
||||
|
@ -82,7 +82,7 @@ fun SneakersContent(
|
||||
}
|
||||
|
||||
OverSmth("Популярное", navController)
|
||||
SneakerSelection(sneakers = sneakers)
|
||||
SneakerSelection(sneakers = sneakers, viewModel)
|
||||
SalesBar()
|
||||
BottomNavigationBar()
|
||||
}
|
||||
|
@ -47,6 +47,6 @@ fun FavouriteSneakersContent(
|
||||
Column {
|
||||
TopWriteNavigationBar(navController, "Популярное", viewModel)
|
||||
|
||||
SneakerCategorySelection(sneakers)
|
||||
SneakerCategorySelection(sneakers, viewModel)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user