Обновите значение счетчика в элементе столбца Android Jetpack Compose.

Составной элемент продукта:

          @Composable
fun ProductItem(product: Product, index: Int) {

    val addProductViewModel = hiltViewModel<AddProductVM>()

    val productSelectedIndex = remember { mutableIntStateOf(0) }

    Card(
        modifier = Modifier
            .fillMaxWidth()
    ) {
        Row(modifier = Modifier
            .fillMaxHeight()) {

            Column() {

                Row{
                    Box(
                        modifier = Modifier
                            .weight(1f)
                        contentAlignment = Alignment.Center
                    ) {
                        if (product.variants[0].cart_count > 0) {
                            Row {
                                Text(text = product.variants[0].cart_count.toString())
                      }
                        } else {
                            Text(
                                text = "Add To Cart", // "Add To Cart" text
                                modifier = Modifier
                                    .clickable {
                                        productSelectedIndex.intValue = index
                                        val newCount = product.variants[0].cart_count + 1
                                        addProductViewModel.addProduct(product.variants[0].product_id.toString(),
                                            newCount.toString(),
                                            product.variants[0].id.toString())
                                    }
                            )
                        }
                    }
                }
            }
        }
    }
}

Здесь я хочу обновить значение количества текста, нажав «Добавить в корзину».

AddProductResult Компонуемый:

          @Composable
fun AddProductResult(addProductResult: ApiResult<AddProduct>) {

    when (addProductResult) {
        is ApiResult.Loading -> {
            // Loading state code for products
        }

        is ApiResult.Error -> {
            Log.e("addproductapicall", "failure error: " + addProductResult.error.toString())
        }

        is ApiResult.Success -> {
            val Result = addProductResult.data?.error
            if(Result == true) {
                Log.e("addproductapicall", "success success: " + addProductResult.data.message.toString())
            } else {
                Log.e("addproductapicall", "failure success: " + addProductResult.data?.message.toString())
            }
        }
    }
}

Я хочу обновить пользовательский интерфейс текста количества нажатых продуктов, когда я нажимаю текст «Добавить в корзину» только после получения ответа от AddProductResult, когда Result == false

сейчас. его обновление перед результатом вызова API

Это моя модель просмотра

ДобавитьПродуктВМ:

          @HiltViewModel
class AddProductVM @Inject constructor(private val apiService: ApiService,
                                       private val defaultDispatcher: CoroutineDispatcher
): ViewModel() {

    private val _addProductList= MutableStateFlow<ApiResult<AddProduct>>(ApiResult.Empty())
    val addProductList= _addProductList.asStateFlow()

    fun addProduct(productId:String,qty:String,productVariantId:String){
        _addProductList.value = ApiResult.Loading()
        viewModelScope.launch {
            apiService.addProduct(productId,qty,productVariantId)
                .flowOn(defaultDispatcher)
                .catch {
                    _addProductList.value= ApiResult.Error(it.message ?: "Something went wrong")
                }
                .collect{
                    _addProductList.value=it
                }
        }
    }
}

0 ответов

Другие вопросы по тегам