Обновите значение счетчика в элементе столбца 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
}
}
}
}