..

bloc_lint

Читать в Telegram

Продолжаем знакомиться с полезными плагинами и утилитами для bloc и flutter_bloc.

В этом посте речь пойдет о bloc_lint. Это официальный набор правил линтера от команды разработки блока.

Как использовать написано в документации. Скажу лишь, что для этого потребуется bloc_tools, мы его уже разбирали.

Правила, которые уже есть в пакете (рекомендованые отмечены плюсиком):

avoid_build_context_extensions

Избегать использования BuildContext для обращения как к самому блоку, так и к его состоянию. Вместо методов read, watch и select контекста нужно использовать BlocProvider.of и виджеты пакета flutter_bloc.

Более подробно можно почитать в документации.

avoid_flutter_imports

Избегать использование зависимостей Флаттера в блоках и кубитах. Полезно для сохранения в бизнес-компонентах только бизнес-логики - без зависимостей фреймворка.

Примеры и подробности тут.

avoid_public_bloc_methods

Изберать использования публичных методов в блоках. Только блоках, к кубитам не относится. Поскольку в правильной реализации блоков мы оперируем событиями и состояниями, торчащие наружу методы не нужны.

Ознакомиться подробнее можно по ссылке.

avoid_public_fields

Избегать публичных полей в блоках и кубитах. Аналогично правилу выше - в идеале мы оперируем только состоянием, и данные не должны получаться каким-либо другим образом.

Документация с примерами тут.

prefer_bloc

Избегать использования кубитов, использовать только блоки. Моя практика показывает, что полностью отказываться от кубитов не стоит, они порой полезны. Однако если вы сторонник использования только блоков, то правило как раз сделано для большего контроля таких ситуаций.

Подробнее про само правило и бенефиты блока написано в документации.

prefer_build_context_extensions

Избегать работы с блоком всеми способами, кроме как обращением к нему через расширение BuildContext. Используем context.read, context.watch, и context.select. BlocProvider.of, RepositoryProvider.of, BlocBuilder или BlocSelector нельзя. Никогда не видел проектов, где работают с блоком именно таким образом, но правило если что есть.

Больше деталей и объяснений тут.

prefer_cubit

Избегать использования блоков, использовать только кубиты. Видел несколько проектов, которые построены на кубитах, и блоков там вообще нет. Так что решение имеет место быть, и правило для него имеется.

Подробнее про само правило и бенефиты кубита написано в документации.

prefer_file_naming_conventions

Размещать блоки и кубиты в отдельных файлах с определенным неймингом. Нельзя размещать CounterBloc в файле main.dart, можно только в counter_bloc.dart.

Больше о правиле тут.

prefer_void_public_cubit_methods

Избегать публичных не void-методов в кубитах. Поскольку информацию из кубита мы получаем через состояние, любые публичные методы должны только уведомлять о совершении действия, а не запрашивать данные в обход стейта.

Информация о правиле и примеры есть в документации.

bloc_lint на pub.dev