Самые важные пакеты в экосистеме Dart и Flutter на Pub 2024

9ca3e85d6c73488b93693c9fb698d29e.jpg

Компания Very Good Ventures провела исследование и опубликовала рейтинг самых важных пакетов в экосистеме Dart и Flutter. 

Рассказываем, какие пакеты вошли в топ — от независимых разработчиков, компаний и сообщества. 

Как проводилось исследование

На pub.dev опубликовано более 55 000 пакетов. Они помогают разработчикам с задачами от provider до http. 

Чтобы выделить самые ценные пакеты и понять, какие из них требуют особого внимания, в 2020 году Google предложил метрику под названием «Оценка критичности». В ее основе лежит формула, которая выглядит так:

Cpkg​=∑αi​1​i∑​αi​⋅log (1+max (Si​, Ti​))log (1+Si​)​

Si — значение метрики (сигнала) для конкретного пакета. Это может быть количество звезд на GitHub, число активных контрибьюторов или частота обновлений.

αi​ — вес каждой метрики. Он отражает ее важность для оценки критичности. Например, если для нас важнее всего частота обновлений, ее вес будет выше, чем у других сигналов

max (Si​, Ti​) — максимальное значение для сигнала. Если сигнал превышает определенный порог Ti​, его вклад в критичность больше не увеличивается. Это нужно, чтобы исключить слишком большой разброс значений и учесть только действительно критические значения.

(log⁡(1+Si)\log (1 + S_i)log (1+Si​)) — логарифм, который уменьшает вклад больших значений, чтобы они не перекрывали другие сигналы. Например, если у одного пакета 10000 звезд, а у другого — 1000 звезд, разница в 10 раз кажется огромной. Но пакет с 10000 звезд не в 10 раз важнее пакета с 1000.

Наконец, формула нормализует каждый сигнал относительно его порогового значения max⁡(Si, Ti). Это позволяет получать значения в диапазоне от 0 до 1 и делает оценку более стабильной и независимой от роста числа пакетов в экосистеме.

Алгоритм измеряет показатели репозитория, а не пакета. Напомним разницу: репозиторий — это контейнер для кода и его истории, а пакет — единица кода, которая предназначена для повторного использования.

В исследование попали пакеты на pub.dev, которые были правильно ассоциированы с репозиторием на GitHub и Dart-репозиториями. 

Оценки незаменимости репозиториев GitHub, которые содержат пакеты Pub. У 5750 пакетов уровень незаменимость составляет 0.2.

Оценки незаменимости репозиториев GitHub, которые содержат пакеты Pub. У 5750 пакетов уровень незаменимость составляет 0.2.

Пакеты от независимых разработчиков

40ce8cdaed9e3483d0a49e4f99449bd7.jpg

1. flutter_rust_bridge — делает проще взаимодействие между приложениями и кодом, написанным на Rust.

flutter_rust_bridge интегрирует код на Rust с приложениями на Flutter. Rust известен своей безопасностью и производительностью. Он подходит для приложений, которым критически важны стабильная работа и безопасность данных.

Пакет автоматизирует рутинные задачи, например, сериализацию и десериализацию данных и поддерживает асинхронные вызовы. Благодаря ему приложения становятся более отзывчивыми.

Пакет регулярно обновляется. У него солидная документация и активное сообщество, которое помогает начинающим разработчикам.

2. riverpod — управляет состоянием в приложениях. Riverpod разделяет логику управления состоянием и виджеты. Это упрощает структуру кода и делает его более читаемым.

API Riverpod предлагает инструменты для работы с асинхронными данными и потоками и подходит для приложений, которые требуют обработки данных из сети или других источников.

Riverpod легко расширяется и настраивается под задачи приложения. Он часто обновляется, и у него простая документация.

3. bloc — управляет состоянием приложения, в котором используется архитектурный паттерн BLoC.

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

BLoC также хорошо подходит для сложных приложений с множеством состояний и взаимодействий. У него развитая экосистема с документаций, библиотеками, полезным контентом. 

4. freezed — делает проще работу с неизменяемыми классами и генерацией boilerplate-кода.

Пакет упрощает создание неизменяемых (immutable) классов. Он помогает избегать ошибок, которые связаны с изменением состояния объектов. Freezed автоматически генерирует методы для копирования объектов с изменением полей. Работа с состоянием становится безопаснее.

Пакет позволяет создавать объединения (sealed classes), которые могут представлять несколько разных состояний. Это особенно полезно для работы с состоянием в приложениях и обработкой разных сценариев.

Freezed автоматически генерирует методы toString (), hashCode и упрощает работу с объектами. Для сериализации Freezed интегрируется с библиотекой json_serializable, с ним легко преобразовывать объекты в JSON и обратно.

Freezed делает код декларативнее и понятнее. Пакет полностью поддерживает нулевую безопасность (null safety) Dart. Он хорошо интегрируется с другими популярными библиотеками в экосистеме Flutter, такими как Riverpod и BLoC.

5. drift — предназначен для работы с локальными базами данных. Пакет предлагает простой API для работы с SQLite. Поддерживает реактивные потоки данных, что позволяет автоматически обновлять пользовательский интерфейс, когда меняются данные в реальном времени.

Пакет использует статическую типизацию, что позволяет ловить ошибки на этапе компиляции. Код становится надежнее, а отладка — проще.

Drift снижает объем шаблонного кода и упрощает разработку. Позволяет использовать сложные SQL-запросы: объединения, подзапросы и агрегации.

У Drift есть удобные инструменты для управления миграциями базы данных. В экосистеме пакета есть понятная документация, инструкции и гайды по работе с ним.

Drift считается универсальным инструментом для управления состоянием и данными, потому что легко интегрируется с другими популярными библиотеками в экосистеме Flutter, такими как Provider и Riverpod.

6. flutter_inappwebview — создан для интеграции веб-контента в приложения на Flutter. Пакет дает набор функций для работы с веб-контентом, в том числе поддержку JavaScript, управление куками, доступ к заголовкам HTTP. 

flutter_inappwebview использует нативные компоненты WebView, что обеспечивает высокую производительность и плавную работу контента. Пакет позволяет взаимодействовать с нативными API. Это упрощает интеграцию веб-контента с функциями устройства.

flutter_inappwebview предлагает множество разных событий, таких как загрузка страницы или изменение URL. С его помощью легко отслеживать состояние веб-контента и реагировать на изменения в нем.

Разработчики могут настраивать внешний вид и поведение WebView. Например, добавлять пользовательские кнопки, меню, другие элементы интерфейса. 

7. archive — предназначен для работы с архивами файлов, ZIP и TAR. API пакета можно легко интегрировать в проекты. Он не требует дополнительных зависимостей. Благодаря небольшому размеру пакет можно использовать в мобильных приложениях. 

archive пригодится, когда нужно обрабатывать большие файлы и потоки данных в реальном времени. 

8. get — помогает управлять состоянием, маршрутизацией и зависимостями. У пакета лаконичный синтаксис и минималистичный подход. Благодаря гибкости и масштабируемости GetX можно использовать и для небольших проектов, и для крупных приложений.

get также отличает хорошая документация и активное сообщество, которое помогает новичкам.

9. chopper — упрощает работу с HTTP-запросами, предлагает структурированный способ создания RESTful API-клиентов.

Chopper предоставляет удобный интерфейс для работы с RESTful API. Он легко интегрируется с разными форматами данных. Например, SON или XML. 

Chopper поддерживает плагины, поэтому к нему можно добавлять другие функции, например, обработку ошибок, авторизацию, кэширование. Пакет хорошо работает в связке с другими популярными библиотеками, такими как Dio и Retrofit.  

10. file_picker — предназначен для выбора файлов и папок на устройствах пользователей. У пакета удобный интерфейс для работы с файловой системой.

file_picker позволяет выбирать файлы, директории, поддерживает фильтрацию по типам файлов.

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

Пакеты от компаний

1b8e27137c12fdb33f7225219956ea0a.jpeg

1. sentry — мониторит ошибки в приложениях. Легко интегрируется с GitHub, Slack и Jira. Пакет позволяет получать в реальном времени уведомления об ошибках. Можно настроить уведомления по разным критериям. Например, по самым критичным ошибкам.

Sentry не только отслеживает ошибки, но и собирает данные о производительности приложения, по которым можно выявлять узкие места и оптимизировать код.

2. stream_video_flutter — предлагает инструменты для работы с видео в реальном времени. Пакет используется в приложениях с видеозвонками, стримингом видео или другими интерактивными видеосервисами.

У пакета простой API для работы с потоковым видео, поэтому с ним могут работать разработчики с минимальным опытом. Внешний вид и поведение видеоплеера можно настраивать. stream_video_flutter интегрируется с сервисом Stream, который предлагает разные возможности для работы с видео и чатом в реальном времени. 

Пакет поддерживает сообщество разработчиков, поэтому у него хорошая документация и есть примеры интеграции. stream_video_flutter регулярно обновляют и улучшают. 

3. flutter-permission-handler — упрощает управление разрешениями. Библиотека поддерживает разные платформы, включая Android и iOS. flutter-permission-handler запрашивает и проверяет разрешения на доступ к камере, микрофону, местоположению и другим функциям телефона.

Чтобы интегрировать управление разрешениями в приложение, с этим пакетом не нужны глубокие знания особенностей платформ. Библиотека позволяет не только запрашивать разрешения, но и проверять их статусы.

4. patrol — автоматизирует тестирование приложений на Flutter. Пакет позволяет писать и выполнять тесты, которые имитируют взаимодействие пользователя с приложением. 

5. melos — управляет проектами с несколькими пакетами. Melos упрощает работу с монорепозиториями и предлагает инструменты для автоматизации рутинных задач, таких как сборка, тестирование и публикация пакетов. 

Библиотека синхронизирует зависимости между разными пакетами, делает управление версиями проще и уменьшает вероятность конфликтов. Melos — полезная находка для командной работы. Можно быстро вносить изменения в разные пакеты и отслеживать изменения в них.

Пакет быстро интегрируется в процессы CI/CD. Тестирование и развертывание приложений проходит в автоматическом режиме.

6. supabase — предлагает инструменты для создания бэкенда и управления данными. Часто рассматривается как альтернатива Firebase, но с акцентом на использование SQL и открытых стандартов. 

Supabase основан на PostgreSQL. Supabase обеспечивает высокую производительность и его легко масштабировать для приложений разного размера. Благодаря SDK для Dart supavase можно быстро интегрировать с приложениями на Flutter. 

7. amplify_flutter — интегрирует облачные сервисы AWS в мобильные и веб-приложения. Пакет создавался как часть экосистемы Amazon Web Services (AWS). Amplify предлагает набор инструментов для разработки приложений, включая аутентификацию, API (GraphQL и REST), хранение файлов.

У SDK Amplify для Flutter удобные API, поэтому интегрировать облачные функции в приложение сможет и новичок. Приложения на Amplify можно быстро масштабировать благодаря AWS в качестве бэкенда. Это важно для растущих проектов.

8. flutter-geolocator — дает доступ к функциям геолокации на мобильных устройствах. 

У geolocator простой API для работы с геолокацией. Пакет определяет местоположение, помогает отслеживать его изменения и получать данные о скорости движения. 

Пакет использует GPS, Wi-Fi и мобильные сети. geolocator хорошо работает с другими популярными пакетами Flutter, например, google_maps_flutter.

flutter-geolocator часто обновляется. У него понятная и обширная документация. Сообщество разработчиков регулярно публикует способы решения разных проблем, отвечает на вопросы новичков. 

9. flutter_stripe — предлагает интеграцию с популярной платежной платформой Stripe. Пакет поддерживает разные способы оплаты. Он регулярно обновляется и легко интегрируется с последними версиями Flutter и Stripe.

Начинающие разработчики могут быстро начать работу с flutter_stripe благодаря понятной документации и руководствам с наглядными примерами. 

10. at_server — помогает разрабатывать децентрализованные приложения. Удобные API упрощают хранение и извлечение информации. at_server легко интегрируется с другими сервисами и библиотеками. Пакет позволяет работать с данными в режиме реального времени.

Пакеты от сообщества

9ecc89275e5207c0ced56b31550189f5.jpeg

1. plus_plugins — набор плагинов дает доступ к функциям и API на мобильных платформах iOS и Android. Помогает разработчикам интегрировать нативные функции в приложения без кода на нативных языках. 

plus_plugins активно поддерживается сообществом. Его регулярно обновляют, исправляют ошибки, добавляют новые функции. Пакет легко интегрируется с другими инструментами и библиотеками Flutter.

2. Flame — игровой движок предлагает набор инструментов и библиотек, которые делают разработку 2d-игр проще и обеспечивают высокую производительность. 

Интуитивно понятный API движка позволяет быстро начать разработку и не требует глубоких знаний. Flame построен на основе Flutter и использует преимущества фреймворка: горячую перезагрузку, виджеты, анимацию. Возможности рендеринга Flutter обеспечивают высокую производительность.

Flame предлагает много модулей и плагинов, чтобы добавлять в игры звуковые эффекты и другие функции. 

У Flame активное сообщество разработчиков, которое регулярно публикует документацию, примеры кода, отвечает на вопросы.

3. dio — библиотека упрощает взаимодействие с RESTful API. Библиотека поддерживает асинхронные операции, что делает ее идеальной для работы с сетевыми запросами без блокировки основного потока приложения.

Среди функций dio — поддержка разных методов HTTP: GET, POST, PUT, DELETE.

dio помогает обрабатывать ответы, включая автоматическое преобразование JSON. Поддерживает отмену запросов. Это полезно в ситуациях, когда пользователь покидает экран или приложение. С Dio можно легко настраивать заголовки, параметры и таймауты для каждого запроса.

А еще библиотека поддерживает интерцепторы, которые позволяют перехватывать запросы и ответы. Это полезно, когда нужно добавить токены аутентификации или обработать ошибки.

4. audioplayers — позволяет воспроизводить аудиофайлы и управлять ими. Библиотека поддерживает асинхронные операции. Это значит, что можно записывать и воспроизводить аудио без блокировки основного потока приложения.

Сообщество развивает audioplayers, поэтому у библиотеки понятная документация, много примеров работы, руководств, регулярные обновления.

5. photo_manager — дает доступ к фотографиям и видеозаписям на устройствах пользователей. 

photo_manager поддерживает асинхронные вызовы. Это значит, что основной поток приложения не будет блокироваться. 

Разработчики библиотеки регулярно ее обновляют, добавляют новые функции и исправляют ошибки. Документация и примеры помогают быстро разобраться с функциями библиотеки и интегрировать ее в свои проекты. 

Согласны с результатами исследования? Делитесь своим мнением в комментариях!

© Habrahabr.ru