Flutter
Жизненный цикл во Flutter, ошибки и владение
Стабильная идентичность Presenter, замена ModelBinding, обработка ошибок и асинхронное завершение внутри жизненного цикла виджетов.
Жизненный цикл во 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. После частичной инициализации функцию нельзя считать работоспособной.
Три области владения
- Flutter владеет состоянием виджета и контроллерами отрисовки.
MvpViewвладеет Presenter.- Композиция приложения владеет ModelBinding и всеми бизнес-объектами, захваченными им.
Flutter не может ожидать завершения dispose(). Очистка Presenter начинается сразу и заканчивается асинхронно. Поэтому тяжёлые бизнес-ресурсы остаются вне Presenter и закрываются их настоящим владельцем.