Обновите количество элементов в столбце «Составление Android Jetpack».

Список продуктов:

      @Composable
fun DisplayProducts(productResult: ApiResult<GetProduct>) {
    when (productResult) {
        is ApiResult.Loading -> {
            // Loading state code for products
        }

        is ApiResult.Error -> {
            // Handle product loading error
        }

        is ApiResult.Success -> {
            val productList = productResult.data?.Product
                Column(
                modifier = Modifier
                    .fillMaxSize()
                    .verticalScroll(rememberScrollState()) // Add verticalScroll
            ) {
                productList?.forEachIndexed { index,product  ->
                    ProductItem(product, index)
                }
            }
        }
    }
}

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

          @Composable
fun ProductItem(product: Product, index: Int) {
    
    val addProductViewModel = hiltViewModel<AddProductVM>()
    val addProductResult by addProductViewModel.addProductList.collectAsState()

    val productSelectedIndex = remember { mutableIntStateOf(0) }

    Card(
        modifier = Modifier
        shape = RoundedCornerShape(8.dp)
    ) {

            Column() {
                Row{
                    Box(
                        modifier = Modifier
                            .weight(1f)
                            .wrapContentHeight()
                            .border(1.dp, Color.Black, shape = RoundedCornerShape(5.dp)),
                        contentAlignment = Alignment.Center// Add border with corner radius
                    ) {
                        Text(text = product.variants[0].measurement +" "+ product.variants[0].measurement_unit_name,
                            fontSize = 15.sp,
                            modifier = Modifier.padding(12.dp,4.dp,12.dp,4.dp))
                    }
                    Spacer(modifier = Modifier.size(16.dp))
                    Box(
                        modifier = Modifier,
                        contentAlignment = Alignment.Center
                    ) {
                        if (product.variants[0].cart_count > 0) {
                            Row {
                                Text(text = "-",
                                    fontSize = 15.sp,
                                    modifier = Modifier.padding(8.dp))
                                Spacer(modifier = Modifier.size(16.dp))
                                Text(text = product.variants[0].cart_count.toString(),
                                    fontSize = 15.sp,
                                    modifier = Modifier.padding(8.dp))
                                Spacer(modifier = Modifier.size(16.dp))
                                Text(text = "+",
                                    fontSize = 15.sp,
                                    modifier = Modifier.padding(8.dp)
                                        .clickable {
                                            productSelectedIndex.intValue = index
                                            product.variants[0].cart_count=+1
                                            addProductViewModel.addProduct(product.variants[0].product_id.toString(),
                                                                           product.variants[0].cart_count.toString(),
                                                                           product.variants[0].id.toString())
                                            Log.e(
                                                "selectedProduct",
                                                "selected Product offset : ${productSelectedIndex.intValue}"
                                            )
                                        })
                                    }
                        } else {
                            Text(
                                text = "Add To Cart", // "Add To Cart" text
                                fontSize = 14.sp,
                                modifier = Modifier
                                    .background(Color.Blue,shape = RoundedCornerShape(5.dp) )
                                    .padding(12.dp,4.dp,12.dp,4.dp)
                                    .clickable {
                                        productSelectedIndex.intValue = index
                                        product.variants[0].cart_count=+1
                                        addProductViewModel.addProduct(product.variants[0].product_id.toString(),
                                            product.variants[0].cart_count.toString(),
                                            product.variants[0].id.toString())
                                        Log.e(
                                            "selectedProduct",
                                            "selected Product offset : $index"
                                        )
                                      }
                                 },
                            )
                        }
                    }
                }
            }
        }
    }
}

ДобавитьПродуктРезультат:

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

    when (addProductResult) {
        is ApiResult.Loading -> {
            
        }

        is ApiResult.Error -> {
            // Handle product loading error
        }

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

Модель просмотра:

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

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

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

Когда я нажимаю текст «Добавить в корзину», я делаю вызов API и получаю результат вAddProductResult.

if ( val Result = addProductResult.data?.error == false), мне также нужно обновить текстовое значение на 1, чтобы скрыть текст «Добавить в корзину», сделать видимым поле «Строка в» и отобразить значение счетчика в тексте.

Как получить результат API и обновить единственное количество выбираемых продуктов?

Это мой скриншот

0 ответов

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