Работа с запечатанными классами UiState в Android ViewModelAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Работа с запечатанными классами UiState в Android ViewModel

Сообщение Anonymous »


Я читаю ускоренный курс по уровню пользовательского интерфейса Android, и там предлагается моделировать сложное состояние пользовательского интерфейса с помощью запечатанного класса, например. вот так:


Изображение


Я бы представил такое состояние пользовательскому интерфейсу (Compose) в виде

private val _uiState = MutableStateFlow(HomeUiState.NoPosts()) // поток типа HomeUiState вал uiState = _uiState.asStateFlow() Теперь, если я активирую бизнес-логику из своего пользовательского интерфейса, например

// в пользовательском интерфейсе когда (uiState) { is HasPosts -> { // умное приведение типа интерфейса к конкретному классу данных HomeUiState.HasPosts // Действие инициировано, например. с помощью кнопки viewModel.refreshPosts() } } Похоже, мне всегда приходится выполнять приведение типов в ViewModel, прежде чем я смогу получить доступ к членам, специфичным для UiState, из которого была запущена функция.

// ViewModel весело обновитьPosts() { if(uiState.value — HomeUiState.HasPosts) { // здесь я могу получить доступ к конкретным членам HasPosts, таким как PostsFeed uiState.postsFeed.refresh() } } Я не могу представить, чтобы мне приходилось выполнять приведение типа в каждой функции ViewModel, чтобы получить доступ к свойствам UiState. Например. подумайте о UiStates, таких как UiState.Loading и UiState.Success: большинство функций в ViewModel будут работать с состоянием UiState.Success и просто потому что у меня есть еще один UiState, который мне нужно использовать везде?

Я точно что-то упускаю?!
Ответить

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

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

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

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

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