Обновите количество элементов в столбце «Составление 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 и обновить единственное количество выбираемых продуктов?