Flutter

Жизненный цикл во Flutter, ошибки и владение

Стабильная идентичность Presenter, замена ModelBinding, обработка ошибок и асинхронное завершение внутри жизненного цикла виджетов.

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

Жизненный цикл во Flutter, ошибки и владение

MvpView сохраняет один Presenter, пока не меняется идентичность виджета и ModelBinding. Обычные перестроения родителя, сигналы Model, новая Theme или локаль не заменяют его.

Новый Presenter создаётся, когда

  • изменился экземпляр ModelBinding;
  • Flutter заменил состояние виджета MvpView, в том числе из-за нового Key;
  • View был удалён, а затем вставлен заново.

Предыдущий Presenter закрывается асинхронно. createPresenter всегда должен возвращать новый экземпляр, а не кэшированную сущность.

Обработка ошибок

onError получает асинхронные ошибки Stream Model, повторного чтения, каналов Presenter, отмены подписок и closePresenter(). Без обработчика пакет передаёт их в FlutterError.reportError.

Синхронные ошибки начального ModelBinding, создания Presenter или построения ViewState остаются ошибками этапа построения Flutter. После частичной инициализации функцию нельзя считать работоспособной.

Три области владения

  1. Flutter владеет состоянием виджета и контроллерами отрисовки.
  2. MvpView владеет Presenter.
  3. Композиция приложения владеет ModelBinding и всеми бизнес-объектами, захваченными им.

Flutter не может ожидать завершения dispose(). Очистка Presenter начинается сразу и заканчивается асинхронно. Поэтому тяжёлые бизнес-ресурсы остаются вне Presenter и закрываются их настоящим владельцем.

ARKTELOS

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