Выбор ответа Junior Управление состоянием спрашивают часто обновлено
BLoC: BlocBuilder и BlocListener
Вопрос
После успешного входа нужно перейти на главный экран. Где это делать в flutter_bloc?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: В BlocListener: он срабатывает один раз на каждое новое состояние. builder может вызываться много раз для одного состояния (перестроение родителя, смена темы), поэтому навигация в нём сработает повторно.
Варианты ответа
- В
BlocListener: он срабатывает один раз на каждое новое состояниеправильный ответ - В
builderуBlocBuilder, проверив, что пришло состояние успешного входа - Прямо внутри
Blocчерез глобальныйnavigatorKey, чтобы UI не знал о навигации - В
initStateэкрана входа, подписавшись там на поток состояний блока вручную
Разбор
builder может вызываться много раз для одного состояния (перестроение родителя, смена темы), поэтому навигация в нём сработает повторно. BlocListener вызывается один раз на каждое изменение состояния и создан для навигации, снекбаров, диалогов. Навигация изнутри блока смешивает логику и UI и усложняет тесты. initState выполняется до входа.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.