Шлях у світ Flutter: найкращі пакети для початківців
Всім привіт! Мене звати Ігор, я працюю Flutter-розробником в компанії Anadea. Розробники, які тільки починають працювати з Flutter, часто мають складнощі у виборі пакетів, тож цей матеріал має полегшити їм життя.
Отже ви починаєте працювати з Flutter і стикаєтеся з вибором з понад 33,000 пакетів на Pub.dev. Вічне питання: на які з них варто витратити свій час? Вибір може бути складним, тому давайте розіб’ємо цю масу на частини.
Ця стаття присвячена пакетам, які я використовую на практиці у своїй роботі та вважаю їх must have для ознайомлення Flutter-розробником. Я розділив їх на основні категорії, а також пропоную альтернативи. Буду радий побачити пропозиції з доповнення цього списку в коментарях.
Статтю також можна прочитати англійською.
Які пакети Flutter можна вважати найкращими
Які у нас критерії? В кінцевому підсумку «найкраще» — це суб’єктивне поняття. Ось що я оцінюю:
- сумісність з останньою стабільною версією Flutter;
- підтримка AndroidX (так, це все ще важливо, хоча і стає нормою за замовчуванням);
- універсальність для багатьох платформ (Web, iOS, Android і т. д.);
- покриття тестами: як інтеграційними, так і модульними;
- якісна документація (хто має час розшифровувати погану документацію?);
- активне обслуговування: часті оновлення та активне комʼюніті — ось ключ до успіху.
Отже з критеріями визначилися. Перейдімо до справи!
Управління станом
Flutter_bloc — це бібліотека передбачуваного управління станом для Dart, яка є простою, високоякісною та добре протестованою.
Бібліотека дозволяє:
- переконатися у поточному стані програми в будь-який момент. Проводити комплексні тести, щоб переконатися, що програма реагує так, як очікувалося;
- документувати кожну взаємодію користувача у вашій програмі для ухвалення рішень на основі даних.
- оптимізувати ефективність за допомогою повторного використання компонентів в межах та між різними програмами;
- сприяти плавній співпраці між кількома розробниками за допомогою стандартних шаблонів та конвенцій;
- Прискорювати розробку застосунків.
Альтернатива
Riverpod — бібліотека управління станом для Flutter, яка спрощує доступ до стану, зберігаючи водночас його надійність та можливості для тестування.
Мережеві операції
Chopper — це генератор клієнта HTTP для Dart і Flutter за допомогою source_gen
. Він спрямований на спрощення та очищення викликів API за допомогою генерації коду.
Chopper побудований на основі пакету HTTP, що означає, що він підтримує всі ті ж методи HTTP (GET, POST, PUT, DELETE і т. д.) та опції, що й пакет HTTP. Однак Chopper полегшує написання чистого, організованого коду для викликів API у застосунках Flutter.
Альтернатива
Retrofit — генератор клієнта dio для конвертації типів за допомогою source_gen
і натхненний Chopper.
Генератор коду та інструменти збірки
Json Serializable надає конструктори для Dart Build System для створення коду, який перетворює в JSON і з JSON шляхом анотування класів Dart. Щоб позначити клас як серіалізований, ви повинні анотувати його за допомогою @JsonSerializable()
.
Freezed дозволяє визначати незмінні класи у Dart чисто і легко. Позначивши клас анотацією, Freezed генерує всі необхідні шаблони для перетворення класу в дані з методами fromJson
, toJson
та всіма іншими необхідними методами.
Хоча Freezed корисний, його слід використовувати свідомо, оскільки він може спричинити довгий час збірки у великих проектах. Із цього потім випливає дискусія, чи треба комітити згенеровані файли Freezed, але це вже обирає кожна команда окремо.
Ефективна робота з двома останніми типами бібліотек та їхня користь прекрасно продемонстрована у DOU Livecoding з Анною Леущенко.
Інʼєкція залежностей
GetIt — це простий ServiceLocator для Flutter, який допомагає вам отримувати доступ до сервісних об’єктів, як-от клієнти REST API або бази даних, щоб їх легко можна було мокувати, а також доступу до BLoCs з Flutter Views. З його простим налаштуванням та незалежністю від генерації коду Get_it став слушним варіантом для розробників, які шукають простий та легкий підхід до керування залежностями.
Injectable — це зручний генератор коду для Get_it. Зазвичай ця пара рухається завжди разом.
База даних
База даних ObjectBox — це чудовий варіант для зберігання об’єктів Dart у кросплатформеній програмі. Вона створена для високої продуктивності. ObjectBox використовує мінімальні ресурси CPU, пам’яті та батареї, роблячи вашу програму ефективною.
Зберігаючи дані локально на пристрої, ObjectBox допомагає знизити витрати на хмарні сервіси та створювати програму, яка не залежить від підімкнення до мережі. Розпочати роботу з інтуїтивно зрозумілим інструментом на основі мови Dart можна за кілька хвилин, без необхідності побудови SQL-запитів.
Альтернатива
Drift — потужна та гнучка бібліотека SQLite для розробки Dart та Flutter. Вона дозволяє розробникам працювати з базами даних за допомогою мови Dart в безпечний та інтуїтивний спосіб. З Drift розробники можуть створювати та взаємодіяти з базами даних, використовуючи виразні можливості мови Dart, як-от async/await та потоки.
Навігація
AutoRouter — це пакет навігації Flutter, який дозволяє передавати аргументи зі строго типізованим підходом та легко створювати глибокі посилання, використовуючи генерацію коду для спрощення настройки маршрутів, із цим необхідно мінімальне кодування для створення всього необхідного для навігації у вашому застосунку.
Пакет останнім часом втратив перше за популярністю місце, але для мене однаково залишається стандартом.
Альтернатива
go_router — декларативний пакет маршрутизації для Flutter, який використовує API маршрутизатора для надання зручного, заснованого на URL API для переходу між різними екранами. Ви можете визначати шаблони URL, навігувати за допомогою URL, оброблювати глибокі посилання та низку інших сценаріїв, пов’язаних з навігацією.
Локалізація
Slang — це бібліотека, що характерна своїми мінімальними вимогами до налаштувань. Вона спрощує створення файлів JSON для перекладу, не потребуючи складних налаштувань. Особливо цей інструмент важливий у запобіганні помилок завдяки перевірці під час компіляції, він забезпечує практично неможливість помилок під час введення, що підвищує надійність коду.
Він дозволяє розділити великі файли перекладу на менші компоненти за допомогою просторів імен, а це сприяє зрозумілості коду та його підтримці.
Альтернатива
Easy_localization — не лише допомагає з локалізацією, але й підтримує локалі множини, роду, вкладеності та напряму. Він підтримує методи розширення для віджетів Text і BuildContext для легкого перекладу. Він також реагує на зміни локалі.
Висновок
Екосистема пакетів Flutter є обширною та постійно змінюється завдяки відданій спільноті розробників. Цей список ні в якому разі не є остаточним; він базується на моєму досвіді та вимогах, з якими я стикався у проєктах розробки Flutter-застосунків. Ваш власний проєкт може вимагати інших рішень, і це абсолютно нормально. Експерементуйте та знаходьте оптимальні варіанти для себе!
Поширенні питання
Чому важливо обирати правильні пакети Flutter
Вибір правильних пакетів Flutter має вирішальне значення, оскільки це безпосередньо впливає на якість, підтримку та ефективність вашого застосунка. Правильні пакети забезпечують сумісність з останніми версіями Flutter, підтримку на різних платформах (як-от Android, iOS та Web), а також надійну функціональність з високим покриттям тестами.
Вони також мають гарну документацію та активну спільноту, що є важливим для усунення неполадок та забезпечення довгострокової життєздатності.
Як пакети поліпшують розробку застосунків Flutter
Пакети Flutter поліпшують розробку застосунків, надаючи готовий, перевірений та надійний код для різних функцій. Це заощаджує час та зусилля розробників під час написання коду з нуля. Пакети, як-от Flutter_bloc
для управління станом, Chopper
для мережі та ObjectBox
для зберігання даних, оптимізують певні аспекти розробки застосунків.
Вони дозволяють розробникам фокусуватися на створенні унікальних функцій свого застосунка, а не вигадувати велосипед для стандартних функцій.
Як ефективно навігувати в екосистемі пакетів Flutter
Під час навігації в екосистемі пакетів Flutter варто враховувати наступні поради:
- досліджуйте: досліджуйте сумісність кожного пакета, його історію обслуговування та відгуки спільноти;
- тестуйте на придатність: експерементуйте з кількома пакетами в тестовому проєкті, щоб переконатися, наскільки добре вони інтегруються з вашим застосунком та відповідають вашим конкретним потребам;
- будьте в курсі: екосистема Flutter швидко розвивається, тому важливо бути в курсі нових та оновлених пакетів;
- розглядайте альтернативи: завжди шукайте альтернативні пакети, які можуть краще пасувати для потреб вашого проєкту, оскільки один пакет не є універсальним для всіх рішень.
38 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів