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