Як ви, напевно, знаєте, ми надаємо послуги зі створення мобільних додатків на нативних мовах (Swift, Kotlin, Java і ObjectiveC) як для основних платформ, так і для крос-платформної розробки з використанням Flutter (мова Dart). Кілька разів під час обговорення з клієнтами ми чули одне і те ж питання: чому ми не побудували наше рішення за допомогою Flutter замість того, щоб будувати його за допомогою двох окремих нативних мов? І відповідь завжди така: "тому що Flutter не підходить для вашого проекту". Отже, схоже, прийшов час трохи записати на тему, для чого Flutter хороший, а для чого ні.
Для чого флаттер хороший, а для чого ні.
Трохи історії і про чарівництво за лаштунками.
Коли ви заходите у Flutter project home ви знаходите наступний коротки опис: “Flutter це інструментарій UI Google для створення красивих, спочатку скомпільованих програм для мобільних, веб-і настільних комп'ютерів з однієї кодової бази” і це правда: Flutter дозволяє створювати красиві і плавні UI, анімацію, виконувану зі швидкістю 60 fps (в два рази швидше, ніж ReactNative, до речі!), ізолює багатопоточність на пластині, так що продуктивність правильно написаного додатка Flutter дійсно порівнянна з правильно написаним нативним додатком.
Давайте перевіримо, чи можемо ми побудувати будь-який UI: які найбільш часто використовувані елементи UI ви бачите в сучасних додатках? Кнопки, списки і таблиці з інтерактивними осередками, Слайдери, діаграми і т.д. все це доступно і легко налаштовується. Створення красивих сучасних UIs, наступних принципам матеріального дизайну або навіть все більш і більш популярного скеуоморфізму в Flutter абсолютно можливо, перевірте деякі UIs, які ми побудували для наших клієнтів за допомогою Flutter:
Отже, давайте перерахуємо випадки, коли використання Flutter економить Ваш час і гроші:
Коли використання Flutter економить ваш час та гроші.
Використовуйте, якщо:
- У вас є система з відносно легким мобільним клієнтом, таким як соціальна мережа, додаток для співробітників, додаток для подій. Flutter надзвичайно хороший з приємним і плавної побудовою UI, використання REST та іншими стандартними завданнями.
- Ваш мобільний додаток - це не ключовий момент продукту, а скоріше маркетинговий інструмент: припустимо, ви обідаєте новим брендом бутильованої води, а Мобільний додаток необхідно як рекламний інструмент, щоб підвищити впізнаваність бренду і присутність продукту. У вас є набагато більше речей, щоб думати і інвестувати ресурси на додаток до двох рідних мобільних додатків.
- Ви розробляєте POC для подачі продукту. Якщо продукт і ідея не включають низькорівневі API мобільних ОС (наприклад, редагування звуку або відео, BLE-зв'язок між пристроями і т. д.) - Flutter-ідеальний вибір.
Якщо ви ще не знаєте, деякі з великих компаній, таких як Alibaba, мобільні клієнти зроблені з Flutter. Це говорить саме за себе.
Звучить як чарівна куля, чи не так? Що ж, давайте продовжимо наше дослідження.
Давайте не будемо забувати про те, що це фреймворк, з його власною мовою і власною структурою проекту, процесами складання і т.д. давайте уявимо, що нам потрібна якась популярна стороння бібліотека, наприклад Google Maps, для використання в проекті. Очевидно, що ми не можемо просто встановити модулі для iOS або імпортувати бібліотеку за допомогою Gradle для Android і написати фрагмент коду, щоб зробити його видимим в проекті в специфічних для платформи файлах-вони кожен раз генеруються заново з коду Flutter, тому наші зміни будуть втрачені. Нам потрібно перевірити, чи є в наявності модуль Flutter для Google Maps. Швидше за все, для нас Flutter має широке і зростаюче співтовариство, і чим більше він стає популярним - тим частіше постачальники бібліотек вважають за необхідне пропонувати орієнтовану на Flutter збірку своїх компонентів. Як ви можете знайти в інтернеті, існує безліч модулів Flutter для найпопулярніших компонентів: модулі для Google Maps, FireBase, Twillio, різні інтеграції соціальних мереж і т. д.
Наступне питання, яке ми повинні задати собі - що робити, якщо мені потрібен якийсь менш популярний компонент для інтеграції в моєму мобільному додатоку Flutter? Давайте візьмемо LiveChat як приклад (ми беремо його з нашого досвіду, звичайно). Приємну, засновану на підписці, систему навіть можна назвати преміальною якістю. Давайте уявимо, що Ви вже платите за цю послугу - і ви хочете використовувати її в своєму додатку Flutter. Але, на жаль, вони не надають Flutter SDK (принаймні, на той момент, коли ми працювали з ним, вони цього не робили). Як ви повинні діяти? Є тільки два способи: попросити Постачальника створити, відправити і підтримати Flutter SDK для свого продукту (і ми активно закликаємо всіх постачальників мобільних бібліотек зробити це!), що може зайняти деякий час - вони, безумовно, мають список більш пріоритетних завдань та викликів, таких як виправлення помилок та підтримка бібліотек, які вони вже надсилають та продають, створення нової бібліотеки без негайного грошового потоку матиме пріоритет набагато нижче, звичайно. Або ви можете замовити індивідуальну розробку модуля Flutter wrapper у деяких розробників програмного забезпечення, таких як ми. Ми створили оболонку LiveChat для одного з наших клієнтів, виправили Google Captcha для іншого і т.д. але - це вже розробка користувальницького програмного забезпечення. Розробник, який може це зробити, повинен бути не тільки відмінним розробником Flutter, він також повинен бути хорошим як в розробці iOS, так і в розробці Android. Таким чином, це може бути болісно, а в деяких випадках навіть може порушити ваші плани. Іноді ми рекомендуємо замінити деякі сервіси і рішення розробляючи додаток Flutter. Щоб проілюструвати це: на ринку є дуже гарне геолокаційне та картографічне рішення під назвою "Here". Вони офіційно не підтримували Flutter SDK, принаймні в той момент, коли ми цього потребували, вони цього не робили. Після оцінки витрат на створення один клієнт вирішив, що поки ця система є наріжним каменем їх вирішення і вони не можуть замінити тут Google Maps або OpenStreet Map - їм краще розробити два нативних додатки окремо, а потім інвестувати в одноразовий модуль використання Flutter.
Схоже, ми досягли точки обговорення компромісів, з якими ми стикаємося, розвиваючи Flutter, чи не так? Давайте зануримося в тему
Компроміси, з якими ми стикаємося з Flutter.
Давайте узагальнимо те, що ми вже знаємо про можливі компроміси, і систематизуємо те, що ми знаємо про них:
- По-перше, не варто дивуватися уявній простоті: створення двох версій Програми, однієї для iOS і однієї для Android, на одній кодовій базі Flutter не в два рази швидше і в два рази дешевше, ніж створення двох повністю розділених додатків з нативними мовами. Розробнику Flutter необхідно протестувати свою роботу на двох платформах, іноді він виявляється в ситуації, коли модуль, який він вибрав для використання, прекрасно працює з однією плановою формою - але працює з проблемами на інший (тут потрібно згадати WebView і SoftKeyboard - вони відомі описаною проблемою, багато Flutter-nubies зламали на них зуби). Виходячи з нашого досвіду, якщо ми візьмемо А як вартість збірки програми для Android і I як версію iOS для одного і того ж додатка, F (Flutter) не буде дорівнює (A + I)/2, це більше схоже на 2*(A + I)/3.
- Якщо ваше рішення включає в себе не широко використовуваний компонент, API або сервіс - ймовірність того, що розробники не знайдуть для нього модуль Flutter, варто згадати. Зробіть дослідження, перш ніж розраховувати на нього, реальність може виправити ваші плани.
- Вартість розробки користувацьких модулів і бібліотек Flutter дуже висока, тому що розробник(и), який може це зробити, повинен добре працювати з усіма трьома Flutter, iOS і Android. Якщо ви обмежені в бюджеті, іноді напрочуд більш економічно вигідно йти з нативною розробкою.
Тепер, коли ми знаємо, для чого хороший Flutter (додатки з сучасними красивими UIs і більш або менш стандартним функціоналом, такі як новинні агрегатори, програми для замовлення їжі і доставки, клієнти соціальних мереж, обгортки навколо простих веб-сайтів, що дозволяють користувачеві відкривати сайт в WebView всередині програми і т. д.) І в яких випадках використання Flutter є компромісом (додатки, що використовують нестандартні компоненти і специфічні API, такі як чати, відеодзвінки, карти і т. д.), Давайте перейдемо до наступної зупинки: коли використання Flutter дійсно погана ідея.
Коли Flutter - це дійсно погана ідея?
Перш за все, я хотів би підкреслити, що все в цьому розділі є приватною думкою, іноді заснованою на досвіді, а іноді-на теоретичних роздумах. До тих пір, поки ці обмеження засновані в основному на обмеженнях платформи і загальних обмеженнях гібридного підходу, на жаль, вони навряд чи коли-небудь будуть дозволені в Flutter. Справедливо кажучи, те ж саме стосується не тільки Flutter, але і всіх гібридних рішень, які коли-небудь були і будуть на ринку.
Одна з ніш, в якій ми працюємо в A5 Mobile Development, - це IoT. Мобільні додатки в цій області масово використовують протоколи BLE, bite і дані датчиків. Робота з низькорівневими API ОС є обов'язковою умовою для такого роду додатків, і, звичайно ж, ми спробували використовувати для цього Flutter. І наш досвід навчив нас, що це не дуже гарна ідея. Сенс побудови користувальницьких інтерфейсів для систем Інтернету речей, такі як Аякс - ідеально підходить для завдань флаттера. Але тільки тому, що в цьому випадку Flutter має справу тільки з поданням користувальницького інтерфейсу і REST API / Push-повідомленнями. Вся "магія" Інтернету речей відбувається між встановленими датчиками і системою IoT Wifi Hub, побудованої навколо них. Коли мова йде про використання датчиків, Бле, необроблені укуси, розетки та інші інтерфейси низького рівня на мобільному пристрої - не тріпатися. Його Гібридна природа змушує його працювати в своєрідній пісочниці та внутрішньосистемних низькорівневих інструментах, недоступних безпосередньо в Flutter. Єдиний спосіб якимось чином проникнути в нього-це написати оболонку навколо власних бібліотек і використовувати її. Це призводить до зниження продуктивності нижче прийнятного рівня і підвищення вартості розробки до зірок.
Ще одна область, де Flutter не застосовується, - це Обробка звуку і відео. Робота з бітами, застосування фільтрів і т.д. зазвичай виконується за допомогою C-написаних спочатку скомпільованих бібліотек і дуже відрізняється від платформи до платформи. Будь-яке гібридне рішення тут тільки додає більше шарів упаковки, тому не покращує ситуацію.
Давайте тепер складемо список поганих ідей:
- Не використовуйте Flutter, якщо ваш мобільний клієнт повинен мати справу зі збором даних датчиків або працювати з BLE.
- Не використовуйте Flutter, якщо вам потрібно отримати доступ до низькорівневих системних API, таких як потокове передавання та Обробка звуку/відео. Маскарадні та Instagram-подібні програми з досвідом Flutter на 99% не виправдають ваших очікувань. OCR на стороні клієнта за допомогою Flutter теж погана ідея. Він буде працювати тільки в тому випадку, якщо розпізнавання і обробка зображень виконуються на стороні сервера.
- Не використовуйте Flutter, якщо ваш додаток використовує доповнену реальність: підходи та API Apple і Google дуже різні, нативні бібліотеки, що надаються ними, оптимізовані апаратно. Обертати нативні бібліотеки в модуль Flutter для використання його на обох платформах-дуже погана ідея, використовуйте native!
- Машинне навчання на клієнтській стороні програми Flutter також є дорогою в пекло з тих же причин, що і AR. Google і Apple зробили приголомшливу роботу з вичавлювання всього можливого з мобільного пристрою, що залишився на плечах гігантів.
- VoIP і захищені повідомлення через Flutter також є поганою ідеєю, оскільки вони потребують низькорівневих API-інтерфейсів ОС.
Висновки
Використовуйте Flutter для: додатки з сучасним красивим UIs і більш-менш стандартним функціоналом, такі як новинні агрегатори, додатки для замовлення і доставки їжі, клієнти соціальних мереж, обгортки навколо простих веб-сайтів, що дозволяють користувачеві відкривати сайт в веб-поданні всередині програми і т. д.
Подумайте ще раз, якщо ваша програма використовує нестандартні компоненти та спеціальні API, такі як чати, відеодзвінки, карти тощо.
Краще перейти до нативної розробки, якщо ви створюєте додаток, що обробляє відео або аудіо, використовуючи дані BLE або датчиків, використовуючи Машинне навчання або розпізнавання зображень на стороні клієнта.
Сподіваюся, тепер ми знаємо набагато більше про те, де флаттер застосуємо, а де ні. Якщо у вас є якісь ідеї щодо нової програми і є побоювання, що Flutter - це спосіб використання - напишіть нам повідомлення, і ми з радістю допоможемо вам прийняти рішення.
У міру того як наш досвід зростає і структура Flutter вдосконалюється з кожним днем, списки і навіть ідеї в статті можуть бути виправлені або повністю змінені з часом. Спасибі, що прочитали це і стежте за оновленнями!