Выбор ответа Junior Управление состоянием спрашивают часто обновлено

BLoC: BlocBuilder и BlocListener

Вопрос

После успешного входа нужно перейти на главный экран. Где это делать в flutter_bloc?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: В BlocListener: он срабатывает один раз на каждое новое состояние. builder может вызываться много раз для одного состояния (перестроение родителя, смена темы), поэтому навигация в нём сработает повторно.

Варианты ответа

  1. В BlocListener: он срабатывает один раз на каждое новое состояниеправильный ответ
  2. В builder у BlocBuilder, проверив, что пришло состояние успешного входа
  3. Прямо внутри Bloc через глобальный navigatorKey, чтобы UI не знал о навигации
  4. В initState экрана входа, подписавшись там на поток состояний блока вручную

Разбор

builder может вызываться много раз для одного состояния (перестроение родителя, смена темы), поэтому навигация в нём сработает повторно. BlocListener вызывается один раз на каждое изменение состояния и создан для навигации, снекбаров, диалогов. Навигация изнутри блока смешивает логику и UI и усложняет тесты. initState выполняется до входа.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме