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