Представьте, что я использую блок для обработки сетевого запроса. В случае сбоя запроса способ обработки сбоя будет различным в зависимости от платформы. В моем веб-приложении я хотел бы перенаправить пользователя на страницу с ошибкой, в то время как в моем приложении IOS я хотел бы показать диалоговое окно.
Поскольку блок должен использоваться и использоваться совместно только для обработки бизнес-логики, а часть обработки ошибок не имеет ничего общего с бизнес-логикой, мы должны попросить часть пользовательского интерфейса позаботиться об обработке ошибок.
Пользовательский интерфейс может отправить обратный вызов ошибки в блок, и блок будет запускать его при возникновении ошибки. Мы также можем обработать ошибку в зависимости от платформы, отправив различные обратные вызовы на разных платформах.
Затем идут два моих вопроса:
Есть ли более подходящий способ сделать это?
Как отправить обратный звонок в блок?
Во флаттере мы имеем доступ к блоку только после метода жизненного цикла initState
(поскольку мы получаем блок из контекста компоновщика, который следует только после initState
). Тогда мы можем только отправить обратный вызов в методе сборки.
Таким образом, мы будем повторно отправлять обратный вызов в блок каждый раз, когда происходит восстановление (эти повторения не имеют смысла). С помощью реакции такая одноразовая инициализация может быть выполнена в таких жизненных циклах, как componentDidMount
.
В трепетании, как мы достигаем цели запуска этих инициализаций только один раз?