Flutter
MvpView и BuildContext
Явно переданный ModelBinding или ModelBinding из контекста и использование зависимостей представления Flutter без сохранения устаревшего контекста.
MvpView и BuildContext
MvpView получает ModelBinding в строго определённом порядке:
- использует явный аргумент
model, если он передан; - иначе наблюдает ближайший
MvpModelProvider<Model>точного типа.
Явно переданный ModelBinding
MvpView<ProfileModel, ProfileViewState, ProfileEffect, ProfilePresenter>(
model: profileBinding,
createPresenter: ProfilePresenter.new,
onEffect: handleProfileEffect,
builder: buildProfile,
)
Так локальная зависимость остаётся видна в месте создания функции.
ModelBinding из контекста
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 для будущего перехода.