Flutter

MvpView и BuildContext

Явно переданный ModelBinding или ModelBinding из контекста и использование зависимостей представления Flutter без сохранения устаревшего контекста.

v0.1.0-dev.1Средний уровень

MvpView и BuildContext

MvpView получает ModelBinding в строго определённом порядке:

  1. использует явный аргумент model, если он передан;
  2. иначе наблюдает ближайший MvpModelProvider<Model> точного типа.

Явно переданный ModelBinding

dart
MvpView<ProfileModel, ProfileViewState, ProfileEffect, ProfilePresenter>(
  model: profileBinding,
  createPresenter: ProfilePresenter.new,
  onEffect: handleProfileEffect,
  builder: buildProfile,
)

Так локальная зависимость остаётся видна в месте создания функции.

ModelBinding из контекста

dart
MvpModelProvider<ProfileModel>.value(
  binding: profileBinding,
  child: const ProfileScreen(),
)

Вложенный View не указывает model. Для разового чтения используется context.readMvpModel<ProfileModel>(), а для реакции на замену самого ModelBinding — context.watchMvpModel<ProfileModel>().

Зачем Presenter получает BuildContext

Локализация, темы, доступность, размеры и унаследованные настройки представления Flutter основаны на контексте. FlutterPresenter.buildViewState(context) синхронно читает их при адаптации Model. Среда выполнения не сохраняет контекст.

Одноразовая работа с деревом выполняется в onEffect с актуальным контекстом. Методы Presenter принимают явные параметры и не удерживают старый BuildContext для будущего перехода.

ARKTELOS

Инженерные системы для программного обеспечения, которое обязано выдерживать нагрузку.