Изучение
Presenter как граница адаптации
Преобразование полного бизнес-снимка в готовые данные представления, публичные действия функции и контролируемые одноразовые эффекты.
v0.1.0-dev.1Средний уровень
Presenter как граница адаптации
Presenter находится между Model и View. Его основная задача состоит не в пересылке состояния, а в определении смысла представления.
dart
final class CounterPresenter extends Presenter<
CounterModel,
CounterViewState,
CounterEffect,
CounterEnvironment> {
@override
CounterViewState buildViewState(CounterEnvironment environment) {
return CounterViewState(
valueLabel: environment.formatNumber(model.value),
canIncrement: model.value < 100,
);
}
void increment() {
if (model.value >= 100) {
emitEffect(const CounterLimitReached());
return;
}
model.increment();
}
}
Задачи Presenter
- объединять несколько бизнес-снимков в состояние одного экрана;
- преобразовывать доменные значения в локализованный и отформатированный текст;
- вычислять видимость, доступность действий, загрузку, пустое состояние и ошибки;
- предоставлять View именованные действия функции;
- сравнивать значимые переходы Model перед публикацией эффекта;
- при необходимости хранить небольшое состояние представления.
Что не относится к Presenter
- владение UseCase, Repository или менеджером приложения из Model;
- сохранение
BuildContextдля будущего вызова; - побочные действия внутри
buildViewState; - хранение бизнес-данных, которые должны пережить View;
- передача Model дочерним виджетам.
Локальное состояние представления
Выбранная вкладка или раскрытая панель может принадлежать Presenter, если её сброс вместе с функцией допустим. После изменения вызывается invalidateView(). Если сброс нарушит ожидаемое поведение продукта, значение должно жить в более долгоживущей бизнес-границе и поступать в Presenter через Model.