Flutter

Интеграция с Flutter

Размещение Presenter в дереве виджетов со стабильной идентичностью, актуальным BuildContext, явными эффектами и бизнес-источниками под управлением приложения.

v1.1.0Средний уровень

Интеграция с Flutter

ark_mvp_flutter соединяет независимые от фреймворка контракты с Flutter через MvpView, FlutterPresenter и MvpModelProvider.

yaml
dependencies:
  ark_mvp: ^1.1.0
  ark_mvp_flutter: ^1.1.0

Укажите базовый пакет как прямую зависимость, если код приложения импортирует ModelBinding, Presenter или другой тип ark_mvp.

Карта ответственности

ОбъектКто создаётЧто читаетЧем владеет
Бизнес-источникКомпозиция приложения или функцииДоменные зависимостиСобственные ресурсы и состояние
ModelBindingТа же граница композицииТекущие бизнес-снимки и Stream измененийНе владеет бизнес-объектом
PresenterMvpView через createPresenterТекущую Model и активный BuildContext во время адаптацииЛокальные ресурсы представления
ViewStatePresenterНичего после созданияНе владеет ресурсами
ViewFlutterViewState и действия PresenterЛокальные Flutter-объекты в собственном State

Карта предотвращает две распространённые ошибки: создание бизнес-объекта внутри Presenter и перенос форматирования или политики кнопок обратно во View.

Поток выполнения

  1. MvpView получает явно переданный ModelBinding или ближайший MvpModelProvider точного типа.
  2. До первого чтения он подписывается на все источники изменений Model.
  3. Затем читает начальную Model, создаёт Presenter, подписывается на выходные события и запускает сессию.
  4. Сигнал Model, обновление Presenter или изменение унаследованного окружения приводит к новому ViewState.
  5. Эффект один раз поступает в onEffect(context, effect).
  6. Удаление или замена функции закрывает Presenter.

Точный порядок идентификации, обработки ошибок и завершения описан на следующих страницах раздела.

Передавайте model напрямую, если владелец и MvpView расположены рядом в дереве. Используйте MvpModelProvider.value, когда несколько потомков используют один стабильный ModelBinding или экран должен получить его по точному типу Model. Оба способа создают одинаковый жизненный цикл Presenter.