Некоторое время я использовал флаттер-блоки, и у меня есть проблема, которую я не знаю, как лучше всего ее решить.
У меня есть виджет, который использует блок. Этот виджет имеет поле ввода текста и кнопку, которая запускает сетевой запрос, вызывающий bloc.sendRequest(text)
. Блок испускает ResponseState(bool success, string message)
в зависимости от ответа сервера. Если есть ошибка, конструктор блоков покажет всплывающее окно, отображающее сообщение об ошибке и предлагающее пользователю изменить поле ввода.
Проблема возникает, когда пользователь нажимает ввод текста после отображения всплывающего окна с ошибкой. Flutter обновляет блок построителя, и используемое состояние является предыдущим, которое содержит сообщение об ошибке, которое уже было показано, в результате чего построитель снова показывает всплывающее окно. Какой должен быть наилучший подход к разрешению этой ситуации? Я думал о некоторых решениях:
ResponseState
и не перестраивайте сборщик, если состояние такое же, как и раньше.bloc.sendRequest(text)
возвращал результат и при необходимости отображал всплывающее окно после завершения Future
ResponseState
Каким должен быть лучший подход для решения этой проблемы? Я что-то упускаю?
Спасибо,
слишком много текста и нет кода
BlocBuilder может перестраиваться в любое время, поэтому для событий, которые нужно запускать только один раз для каждого состояния, лучше использовать вместо этого BlocListener
.
Вы что-нибудь делаете в didChangeDependencies? Можете ли вы показать нам весь файл дартс?