BLoC в большом проекте
Вопрос
Как устроен BLoC и как вы организуете его в большом приложении?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Событие на вход, обработчик `on<Event>`, состояние на выход через `emit`
Слои: UI, блок, репозиторий, источники данных; блок не знает про виджеты
`BlocBuilder` с `buildWhen` для UI, `BlocListener` для эффектов
Трансформеры событий: `droppable`, `restartable`, `sequential`, debounce для поиска
Тесты через `blocTest` и моки репозиториев
Общение блоков через репозитории или потоки, а не прямые ссылки друг на друга
Что могут спросить следом
- Как сделать поиск с отменой предыдущего запроса?
- Где создавать и закрывать блоки?
- Как блок узнаёт о выходе пользователя?
Разбор
Образцовый ответ: «BLoC разделяет UI и логику: виджет отправляет события, блок обрабатывает их в on<Event> и выпускает новые неизменяемые состояния. Блок зависит только от репозиториев, а репозитории от источников данных: API, базы. В UI BlocBuilder с buildWhen перестраивает только нужное, BlocListener отвечает за навигацию и снекбары. Для поиска использую трансформер restartable с debounce: новое событие отменяет обработку старого, и не приходят устаревшие ответы. Блоки создаю через BlocProvider на том уровне дерева, где они нужны, и он же их закрывает. Блоки не держат ссылки друг на друга: если корзине нужно знать о выходе пользователя, она слушает поток из AuthRepository. Всё покрываю blocTest»
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.