Решили мы переписать кроссплатформенную мобилку. Три дня срались "React Native или Flutter", не смогли договориться и устроили хакатон - я пишу прототип на реакте, напарник на Флаттере. Через 24 часа смотрим что получилось.
Получилось так себе. Попробовали вернуться на Ionic, смотрели KMM и даже поковыряли .NET MAUI (бывший Xamarin). Пришли к выводу, что все ужасно и не знаем, как жить дальше.
Но пока не забыл, вот вам обзор фреймворков от человека который не писал мобилы примерно никогда. Очень сухо, т.к. еле влез в 4096 символа.
1. Флаттер
Флаттер не юзает нативные контролы и рендерит все попиксельно. Это вызывает чувство "uncanny valley". Которое складывается из миллиона нюансов: кнопки необычные, скролл экрана с непривычной скоростью, баунсы отскакивают не с тем ускорением. "Pull to refresh" надо тянуть пальцем на сантиметр ниже (мышечная память плюется и сопротивляется) и спиннер тоже нестандартный. Шрифт сглажен по другому. И сам шрифт ВООБЩЕ не тот.
(Как понять что приложение на Флаттере? Если скроллить экран двумя пальцами он летит быстрее, хаха. Да, "Медуза", я про тебя)
Можно, конечно, сознательно отодвинуть свой UI еще дальше от дефолта. Обойти "зловещую долину" левее по оси X. Нанять фулл-тайм дизайнера и сделать полностью свой интерфейс, с блекджеком и шлюхами (с).
Но если все равно нанимать - может лучше двух нативщиков?
К тому же, когда приложения решают делать "свой интерфейс" - это всегда бесит. Вспомните эти ужасные виндовые тулзы от ASUS/Corsair, где надо управлять кулерами, RGB или чипсетом. Вместо стандартных кнопок и чекбоксов у меня чертовы искры и градиенты...
Кстати, у Тео есть доходчивый видос про Флаттер. Даже про uncanny valley рассказал, умница. Смотреть всем.
Зато удобство разработки на Флаттере - топ. Доков полно, код строгий и понятный, приложение летает. Но готовьтесь к миллиону закрывающих скобок, хехе. Хорошо что есть отличный плагин к VSCode, без него рефакторить невозможно.
2. React Native
Реакт рендерит нативные контролы, вышеописанной проблемы нет. И на айфоне и на андроиде - родной дизайн. Красота.
Но Реакт - это JS. А значит кодинг - это боль. Особенно для новичка пришедшего с бекенда. Вместо погружения в работу ты все время борешься с тулингом.
Скажем, ты хочешь добавить Drawer - боковое выезжающее меню. Добавляешь компонент из пакета "react-navigation" (в гайде по реакту же написано "юзайте react-navigation", а я человек простой
Авотхуй. Пишу сверху "import Drawer from blabla" и все, приложение не запускается. Ошибка "valueUnpacker is not a worklet". Чтоблять? Какой валью анпакер? Я еще ничего не написал, просто менюшку к пустому экрану прикручиваю! Оказывается, если у тебя "expo" (в гайде же написано "юзайте expo", а я человек простой), то надо ставить другой пакет. Ах да, еще руками поправить babel.js.config. Ах да, еще надо сбросить кеш билда. А как сбросить кеш билда? А вот так. Но в expo не работает.
Короче, через два часа приделал менюшку. Привет JS, я скучал.
Но выглядит же клево? Клево. Вообще супер выглядит. Тормозит, правда. Ибо контролы-то нативные, но JS не компилится, а интерпретируется бриджем на лету. Эх. В общем, если у вас уже есть фронт на Реакте - можно брать. Если нет - нет.
3. .NET MAUI
MAUI я попробовал так, на всякий случай. Все таки C#, а мы его любим. Если в двух словах - MAUI поначалу охуенен. Best of both worlds - нативные контролы как в Реакте, но при этом строгий язык и безглючный тулинг, как у Флаттера. И все компилится в нативный ARM код.
А еще MAUI единственный, где можно тестить iOS прямо из винды. Подрубил айфон в USB и... все! С хот-релоадом и всей хурмой. В винде! Офигеть!
Но Мауи всего два года, он сырой, молодой и глючный. Комьюнити маленькое, StackOverflow - полупустой. Стремно будет взять технологию, а через месяц обнаружить, что там чего-то нет... Например, Face-ID/пальцев! Как можно было в 2023 году родить фреймворк без биометрии?
В общем, тоже отложили пока. Думаем дальше.