Изучение
View, ViewState и ViewEffect
Разделение повторяемых данных отрисовки и одноразовой работы для активного View.
View, ViewState и ViewEffect
Эти три понятия решают разные задачи во времени.
ViewState можно отображать повторно
ViewState содержит всё необходимое для текущего кадра: отформатированный текст, видимые блоки, доступные действия, сообщения валидации, признаки загрузки и устойчивую информацию об ошибках.
Повторная отрисовка одного ViewState должна оставаться корректной. Состояние не считается использованным после перестроения виджета.
View передаёт намерение
View получает ViewState и конкретный API Presenter. Поэтому дочернему виджету передаются обычные значения и обратные вызовы:
ProfileView(
title: viewState.title,
isSaving: viewState.isSaving,
canSave: viewState.canSave,
onSave: presenter.save,
)
View не видит Model и не ищет исходные бизнес-объекты.
ViewEffect выполняется один раз
Навигация, временное сообщение, фокус, буфер обмена или диалог относятся к ViewEffect. Эффекты не сохраняются и не повторяются для нового View. Для Presenter без эффектов используется тип Never.
Правило для ошибок
Информация, к которой пользователь должен иметь возможность вернуться, хранится в бизнес-состоянии и затем во ViewState. Эффект может дополнительно привлечь внимание, но не должен оставаться единственным свидетельством важной ошибки.
Во Flutter onEffect получает актуальный BuildContext. Работа с деревом выполняется в живом View без сохранения контекста в Presenter.