bloc_lint

Продолжаем знакомиться с полезными плагинами и утилитами для bloc и flutter_bloc.
В этом посте речь пойдет о bloc_lint. Это официальный набор правил линтера от команды разработки блока.
Как использовать написано в документации. Скажу лишь, что для этого потребуется bloc_tools, мы его уже разбирали.
Правила, которые уже есть в пакете (рекомендованые отмечены плюсиком):
— avoid_build_context_extensions
Избегать использования BuildContext для обращения как к самому блоку, так и к его состоянию. Вместо методов read,
watch и select контекста нужно использовать BlocProvider.of и виджеты пакета flutter_bloc.
Более подробно можно почитать в документации.
Избегать использование зависимостей Флаттера в блоках и кубитах. Полезно для сохранения в бизнес-компонентах только бизнес-логики - без зависимостей фреймворка.
Примеры и подробности тут.
Изберать использования публичных методов в блоках. Только блоках, к кубитам не относится. Поскольку в правильной реализации блоков мы оперируем событиями и состояниями, торчащие наружу методы не нужны.
Ознакомиться подробнее можно по ссылке.
Избегать публичных полей в блоках и кубитах. Аналогично правилу выше - в идеале мы оперируем только состоянием, и данные не должны получаться каким-либо другим образом.
Документация с примерами тут.
Избегать использования кубитов, использовать только блоки. Моя практика показывает, что полностью отказываться от кубитов не стоит, они порой полезны. Однако если вы сторонник использования только блоков, то правило как раз сделано для большего контроля таких ситуаций.
Подробнее про само правило и бенефиты блока написано в документации.
— prefer_build_context_extensions
Избегать работы с блоком всеми способами, кроме как обращением к нему через расширение BuildContext. Используем
context.read, context.watch, и context.select. BlocProvider.of, RepositoryProvider.of, BlocBuilder или
BlocSelector нельзя. Никогда не видел проектов, где работают с блоком именно таким образом, но правило если что есть.
Больше деталей и объяснений тут.
Избегать использования блоков, использовать только кубиты. Видел несколько проектов, которые построены на кубитах, и блоков там вообще нет. Так что решение имеет место быть, и правило для него имеется.
Подробнее про само правило и бенефиты кубита написано в документации.
— prefer_file_naming_conventions ➕
Размещать блоки и кубиты в отдельных файлах с определенным неймингом. Нельзя размещать CounterBloc в файле
main.dart, можно только в counter_bloc.dart.
Больше о правиле тут.
— prefer_void_public_cubit_methods ➕
Избегать публичных не void-методов в кубитах. Поскольку информацию из кубита мы получаем через состояние, любые
публичные методы должны только уведомлять о совершении действия, а не запрашивать данные в обход стейта.
Информация о правиле и примеры есть в документации.