Как отобразить индикатор прогресса в MVVM, используя JetPack, сочиняя правильно?Android

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

Сообщение Anonymous »

мне нужно добавить элемент в Firebase, используя MVVM и JetPack Compose. Поэтому я хочу начать индикатор прогресса, когда начинается операция добавления, и отклонить его, когда операция завершена. Это функция в интерфейсе: < /p>

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

suspend fun addItem(item: Item): Response
< /code>
Это реализация: < /p>
override suspend fun addItem(item: Item) = try {
val itemId = itemsRef.add(item).await().id
Response.Success(itemId)
} catch (ex: Exception) {
Response.Failure(ex)
}
В ViewModel я называю AddItem нравится это:

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

class ItemViewModel @Inject constructor(
private val repo: ItemRepository
): ViewModel() {
var addItemResponse by mutableStateOf(Response.Loading)
private set

fun addItem(item: Item) = viewModelScope.launch {
addItemResponse = repo.addItem(item)
}
}
< /code>
И внутри пользовательского интерфейса у меня есть кнопка. Когда я нажимаю на него, я добавляю элемент в Firebase: < /p>
var addingItem by remember { mutableStateOf(false) }

Button(
onClick = {
viewModel.addItem(Item("New Item"))
addingItem = true
}
) {
Text(text = "Add Item")
}

if (addingItem) {
when(val addItemResponse = viewModel.addItemResponse) {
is Response.Loading -> CircularProgressIndicator()
is Response.Success -> addingItem = false
is Response.Failure -> print(addItemResponse.ex)
}
}
Проблема заключается в использовании AddingItem . Если не используйте его в операторе IF, я получаю индикатор прогресса, который никогда не останавливается. Так что я использую это так, потому что (не уверен) побочного эффекта. Я кормлю, что это не правильный подход. Есть ли другой способ загрузки панели прогресса, пока происходит добавление предмета?

Подробнее здесь: https://stackoverflow.com/questions/794 ... -correctly
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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