Как правильно отобразить второй тост в JetPack Compose?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как правильно отобразить второй тост в JetPack Compose?

Сообщение Anonymous »

Мне нужно отображать сообщение каждый раз, когда операция добавления/удаления элемента в/из Firebase завершена. Это функции в интерфейсе: < /p>

Код: Выделить всё

suspend fun addItem(item: Item): Response
suspend fun deleteItem(item: Item): Response
< /code>
Это реализации: < /p>
override suspend fun addItem(item: Item) = try {
itemsRef.add(item).await()
Response.Success(Unit)
} catch (ex: Exception) {
Response.Failure(ex)
}

override suspend fun deleteItem(item: Item) = try {
itemsRef.document(item.id).delete().await()
Response.Success(Unit)
} catch (ex: Exception) {
Response.Failure(ex)
}
В ViewModel я называю AddItem и сбросить состояние операций, подобно следующему:
class ItemViewModel @Inject constructor(
private val repo: ItemRepository
): ViewModel() {
private val _addItemResponse = MutableStateFlow(null)
val addItemResponse: StateFlow = _addItemResponse.asStateFlow()

private val _deleteItemResponse = MutableStateFlow(null)
val deleteItemResponse: StateFlow = _deleteItemResponse.asStateFlow()

fun addItem(item: Item) = viewModelScope.launch {
_addItemResponse.value = Response.Loading
_addItemResponse.value = repo.addItem(item)
}

fun deleteItem(item: Item) = viewModelScope.launch {
_deleteItemResponse.value = Response.Loading
_deleteItemResponse.value = repo.addItem(item)
}

fun resetAddItemState() = _addItemResponse.value?.let {
_addItemResponse.value = null
}

fun resetDeleteItemState() = _deleteItemResponse.value?.let {
_deleteItemResponse.value = null
}
}
< /code>
и внутри пользовательского интерфейса я использую: < /p>
when(val addItemResponse = viewModel.addItemResponse.collectAsStateWithLifecycle().value) {
is Response.Loading -> CircularProgressIndicator()
is Response.Success -> {
Toast.makeText(context, "Added", Toast.LENGTH_LONG).show()
resetAddItemState()
}
is Response.Failure -> Text(addItemResponse.ex)
}

when(val deleteItemResponse = viewModel.deleteItemResponse.collectAsStateWithLifecycle().value) {
is Response.Loading -> CircularProgressIndicator()
is Response.Success -> {
Toast.makeText(context, "Deleted", Toast.LENGTH_LONG).show()
resetDeleteItemState()
}
is Response.Failure -> Text(deleteItemResponse.ex)
}
< /code>
Когда я добавляю элемент, отображается первый тост. Если я удалю элемент и подожду, пока второй тост исчезнет, ​​второй тост отображается правильно. Однако, если я добавляю элемент и удаляю его сразу, не ожидая, когда первые тосты исчезнут, второй тост не . Как решить эту проблему?

Подробнее здесь: https://stackoverflow.com/questions/794 ... ck-compose
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»