Как обновить состояние пользовательского интерфейса с использованием Statein в ViewModel JetPack ComposeAndroid

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

Сообщение Anonymous »

У меня есть ProfileViewModel , где я загружаю профиль пользователя, когда пользователь приземляется на экране. Чтобы достичь этого, я использую Statein , чтобы профиль был извлечен автоматически. /> [*] call logoutapi.logout () .

Показать isloading = false и перезагрузить данные профиля после входа.

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

class ProfileViewModel(
private val userInfoApi: UserInfoApi,
private val logoutApi: LogoutApi,
) : ViewModel() {

private val eventChannel = Channel
()
val events = eventChannel.receiveAsFlow()

var profileUiState = flow {
val result = userInfoApi.getUserInfo()
emit(
result.fold(
onSuccess = {
ProfileUiState(userInfo = it, isLoading = false)
},
onFailure = {
ProfileUiState(errorMessage = it.message, isLoading = false)
}
)
)
}.stateIn(
scope = viewModelScope,
started = SharingStarted.Lazily,
initialValue = ProfileUiState(isLoading = true)
)

fun onAction(action: ProfileUiEvent) {
viewModelScope.launch {
eventChannel.send(action)
}
}

fun logoutUser() {
viewModelScope.launch {
// update the logic in here for logout
profileUiState
}
}
}
Я хочу избегать анти-паттернов, таких как:

calling getUserinfo () Inside init {} of viewModel. Вызов.>

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

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

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

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

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

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

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