По каким критериям выбираешь пакеты для 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.

Ответ 18+ 🔞

Блин, вот сидишь такой, выбираешь пакет на pub.dev, а там их, ёпта, овердохуища. И каждый раз голова болит: а не притащишь ли ты в проект какую-нибудь манду с ушами, которая через полгода накроется медным тазом?

Мой главный принцип — доверия ебать ноль. Начинаю всегда с одного вопроса: «А оно нам точно надо?». Если задача простая, типа дату отформатировать, лучше свою утилитку на коленке написать, чем тащить целую библиотеку. Ну а если уж без зависимости никуда, тогда включаю режим параноика и проверяю по пунктам.

1. Жив ли зверь? (Это самое главное!)

  • Когда последний раз обновлялся? Лезу в коммиты на GitHub. Если последний коммит был полгода назад — это пидарас шерстяной, а не пакет. Особенно сейчас, когда Flutter и Dart обновляются как сумасшедшие.
  • Поддерживает ли он всё актуальное? Null-safety, последнюю стабилку Flutter — это must have. Если нет — шёл бы ты нахуй, старьё.
  • Что в issues? Открываю баг-трекер. Если там висят критические баги по году, а мейнтейнеры молчат как рыбы — это распиздяй, а не разработчик. Сразу видно, терпения ноль ебать у этих ребят.

2. Качество и народная любовь.

  • Pub.dev Score: Смотрю, конечно, но не молюсь на него. Вот dio, у него лайков хуй с горы, и это стандарт де-факто для сети. А бывает пакет с высоким счётом, но документация — чих-пых тебя в сраку, одна автогенерация.
  • Документация — это всё. Мне нужны живые примеры, а не сухой апишник. Как у flutter_bloc — зайди, прочитай, сразу понятно.
  • Звёзды на GitHub: Показывают, что народ пользуется. Мало звёзд — подозрение ебать чувствую.

3. Технические приколюхи.

  • Размер, блин! Запускаю flutter pub deps --style=compact и смотрю, какую паровозную сцепку этот пакет за собой тянет. Если для кнопки качает пол-интернета — это пиздопроебибна идея для мобильного приложения.
  • Лицензия: В коммерции — только MIT/BSD/Apache. Увидел GPL — беги, гомосеки налетели.
  • Под все платформы? Если пишу кроссплатформенно, а пакет только под андроид — какого хуя я его тогда беру?

Пример из жизни, чувак: Недавно выбирал стейт-менеджер: riverpod или bloc. Удивление пиздец — оба классные, но разные. Riverpod — гибкий как черт, тесты писать одно удовольствие. А bloc — это такой хуй в пальто, чёткая, событийная архитектура, которая нашим ребятам в команде больше зашла. Посидели, подумали, э бошка думай... В итоге взяли bloc, потому что он лучше лёг на требования проекта. Вот так, без фанатизма.