Flutter Bloc Builder снова вызывается, когда отображается клавиатура

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

  1. Добавьте метку времени к ResponseState и не перестраивайте сборщик, если состояние такое же, как и раньше.
  2. Сделайте так, чтобы вызов bloc.sendRequest(text) возвращал результат и при необходимости отображал всплывающее окно после завершения Future
  3. Отслеживайте, какие всплывающие окна были показаны, чтобы не показывать их дважды, используя отметку времени в ResponseState

Каким должен быть лучший подход для решения этой проблемы? Я что-то упускаю?

Спасибо,

Вы что-нибудь делаете в didChangeDependencies? Можете ли вы показать нам весь файл дартс?

AmitB10 11.12.2020 11:35

слишком много текста и нет кода

user14631430 11.12.2020 11:46
1
2
1 088
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

BlocBuilder может перестраиваться в любое время, поэтому для событий, которые нужно запускать только один раз для каждого состояния, лучше использовать вместо этого BlocListener.

Другие вопросы по теме