По каким критериям выбираешь пакеты для Flutter-проектов?

«По каким критериям выбираешь пакеты для Flutter-проектов?» — вопрос из категории Архитектура, который задают на 29% собеседований Flutter Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Мой выбор всегда начинается с вопроса: "Действительно ли нам нужна эта зависимость?". Для простой функциональности (например, форматирование даты) предпочитаю написать свою утилиту. Если зависимость необходима, оцениваю по следующим критериям:

1. Активность и поддержка (самое важное):

  • Частота обновлений: Смотрю историю коммитов на GitHub. Пакет без обновлений более 6 месяцев — красный флаг, особенно с учетом частых релизов Flutter и Dart.
  • Поддержка актуальных версий: Обязательно проверяю поддержку последней стабильной версии Flutter и Dart, а также null-safety.
  • Issues/PR: Анализирую открытые issues (особенно критические баги) и то, как мейнтейнеры на них реагируют.

2. Качество и популярность:

  • Pub.dev Score: Обращаю внимание на общий балл, но не как на абсолютную истину. dio (10k+ likes) — стандарт для работы с сетью.
  • Документация: Должны быть понятные примеры, а не только auto-generated API docs. Хороший пример — документация к flutter_bloc.
  • Звезды и форки на GitHub: Показывают сообщественную поддержку.

3. Технические аспекты:

  • Размер и зависимости (flutter pub deps --style=compact): Для мобильных приложений важен итоговый размер APK/IPA. Избегаю пакетов, тянущих за собой множество тяжёлых транзитивных зависимостей.
  • Лицензия: Для коммерческих проектов подходят MIT, BSD, Apache 2.0. Избегаю GPL.
  • Платформенная поддержка: Если проект кроссплатформенный, проверяю поддержку iOS, Android, Web, Desktop.

Пример из практики: Для управления состоянием в новом проекте выбирал между riverpod и bloc. Изучил оба: riverpod более гибкий и тестируемый, но bloc имеет чёткую событийно-ориентированную архитектуру, которая лучше подошла под требования проекта и опыт команды. Выбрали bloc.