I'm new in the compose and i am trying to do some changes in lazycolumn with a like button click, it's like an instagram, when i was click to do button, button color and like count should be changed, i tried so many things but it doesn't work if u can help me i will be grateful
---viewmodel---
@HiltViewModel
class MainViewModel @Inject constructor(private val repository: QuicktationRepo) : ViewModel() {
var errorMessage = mutableStateOf("")
var scanIndex = mutableStateOf(0)
var mainList2 = mutableStateOf<List<Quotation>>(listOf())
var isDeleted = mutableStateOf(5)
init {
loadMains(1)
}
fun loadMains(userid: Int) {
viewModelScope.launch {
when (val result = repository.postMainApi(userid)) {
is Resource.Success -> {
mainList2.value = result.data!!.response.quotations.toMutableStateList()
scanIndex.value = result.data.response.scanIndex
errorMessage.value = ""
}
is Resource.Error -> {
errorMessage.value = result.message!!
println(errorMessage.value)
}
}
}
}
fun amILike(userid: Int, quoteId: Int) {
viewModelScope.launch {
when (val result = repository.postLikeApi(userid, quoteId)) {
is Resource.Success -> {
isDeleted.value = result.data!!.response.isDeleted
errorMessage.value = ""
}
is Resource.Error -> {
errorMessage.value = result.message!!
println(errorMessage.value)
}
}
}
}
}
--homepage--
fun HomePage(navController: NavController) {
val interactionSource = MutableInteractionSource()
val isPressed by interactionSource.collectIsPressedAsState()
Surface(modifier = Modifier.fillMaxSize(), color = Color(0xFFDDDDDD)) {
}
Column(
verticalArrangement = Arrangement.Top,
horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier.fillMaxSize()
) {
Column(
verticalArrangement = Arrangement.Top,
horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier.fillMaxSize()
)
{
PostList(navController = navController)
}
}
}
--homepagecomposables--
@Composable
fun PostList(navController: NavController, viewModel: MainViewModel = hiltViewModel()) {
val postList by remember { viewModel.mainList2 }
val errorMessage by remember { viewModel.errorMessage }
val context = LocalContext.current
val scanIndex by remember { viewModel.scanIndex}
PostListView(posts = postList, navController = navController)
if (errorMessage.isNotEmpty()) {
Toast.makeText(context, errorMessage, Toast.LENGTH_LONG).show()
}
}
@Composable
fun PostListView(posts: List<Quotation>, navController: NavController) {
LazyColumn(contentPadding = PaddingValues(top = 5.dp, bottom = 50.dp), verticalArrangement = Arrangement.SpaceEvenly) {
items(posts){ post ->
MainRow(post = post, navController = navController)
}
}
}
@Composable
fun RefreshWithLike(viewModel: MainViewModel = hiltViewModel(), userId: Int, id: Int,navController: NavController) {
viewModel.amILike(userId,id)
}
@Composable
fun MainRow(viewModel: MainViewModel = hiltViewModel(), post: Quotation, navController: NavController) {
Box(modifier = Modifier
.fillMaxWidth()
.wrapContentSize(), contentAlignment = Alignment.TopStart)
{
IconButton(
onClick = {
isPressed = true
},interactionSource = colorControl, modifier = Modifier
.size(21.dp, 20.dp)
) {
Icon(
painter = painterResource(id = R.drawable.like),
contentDescription = "like",
tint = color.value,
modifier = Modifier
.size(21.dp, 20.dp)
)
}
if(isPressed)
{
RefreshWithLike(viewModel,1,id,navController)
isPressed = false
}
}
}