Комментарии 141
Для специфических игр вроде визуальных новелл ещё можно рассматривать, но для всего остального flutter будет крайне неудобным инструментом.
Год назад, примерно когда я стал интересоваться флаттером, написал на нем игру-клон Flutter.Bird, было довольно интересно и надо сказать легко.
Примеры продакш ready игр на этом движке я не знаю, но знаю одну почти игру, написанную на этом движке и выложенную в сторы, можете поиграться:
apps.apple.com/us/app/darkness-dungeon/id1506675248
play.google.com/store/apps/details?id=com.rafaelbarbosatec.darkness_dungeon
github.com/RafaelBarbosatec/bonfire
Есть material, а есть cupertino. Как в результате получается "нативное" приложение для двух платформ? И там и там делают одинаково или
if platform == android window = MaterialWindow
if platform == ios window = CupertinoWindow
Поэтому, даже при использовании неродных виджетов приложение не будет вызывать отторжения и чувства чужеродности.
Но если требуется нативный вид для всех виджетов, то, действительно, нужно их явно указывать через if.
github.com/doppio-dev/iXn
Последний год я так или иначе пишу приложения на Flutter для iOS и Android. До этого у меня был и есть 5 летний опыт работы с Xamarin.
Так почему же флаттер побеждает, если такие статьи идут только от мобилоразработчиков?
Где статьи «Я, Вася, делал сайтики и десктоп на электроне, пересел на флаттер, и теперь меня не оторвать»?
То, что мобилоразработчики наконец-то перестали маяться дурью и писать отдельно под каждый из двух вендор-локов — это прекрасно, но это не «победа», это уже делал react native. Которым, кстати, продолжают пользоваться те, кто пришел имея сайтик и кому нужен апп. Несмотря на все его многочисленные недостатки.
Я писал на Qt, и для меня кроссплатформенный десктоп UI без С++ выглядит очень заманчивой идеей. Надеюсь на скорую поддежку.
минусы:
ксамарин натив — недружелюбная vs4mac для проектирования ui, приходилось переключаться в as и xcode; для подключения популярных андроидовских и иосных либ надо делать биндинги.
ксамарин формс — постоянный спуск к рендерерам, у меня не было проектов, чтобы в нем не было с десяток кастомных рендереров. стандартный набор контролов весьма куцый, по моему мнению для сложного дизайна формс абсолютно не подоходит, нам приходилось сильно изворачиваться, чтобы сделать что то нестандартное.
плюсы над флаттером:
ксамарин натив — честно, не знаю. разве что у вас какой то интерпрайз и вы подключите огромные дотнетовские либы, и не надо будет переводить код в дарт.
формс — мне очень нравятся возможности для mvvm из коробки от майков, что в uwp, wpf и xamforms.
недружелюбная vs4mac для проектирования ui
Есть же райдер.
стандартный набор контролов весьма куцый, по моему мнению для сложного дизайна формс абсолютно не подоходит
На xaml разве нельзя сделать кастомный контрол?
Есть же райдер.
по vs4mac я говорил про нативный ui. для xf формочек для проектирования нет нигде.
На xaml разве нельзя сделать кастомный контрол?
Можно конечно, но он будет состоять из других контролов — которые абстракции над нативом, если вы имеете ввиду композицию в xaml. А сам набор очень ограничен.
Другой минус(ы), очень субъективный, который лично мне сложно выразить словами.
Почему, например, Xamarin так и не подвез Catalyst для Mac? Почему с покупкой Xamarin майкрософтом они все больше превращают ex-Xamarin Studio в IDE для работы с .Net Core, чем собственно с Xamarin? Я уже не говорю о том, что Xamarin.Forms за последние несколько лет превратился собственно в синоним Xamarin. Хотя, тут ответ наверное очевиден. Майкрософт всегда был бизнесом, ориентированным на корпоративный сегмент. Я хочу делать красивый UI и удобные приложения а не формочки для страховой компании.
Как минус Xamarin можно также занести отсутствие Hot Reload/Restart. Вроде как они что-то похожее сделали, но это работает только в Forms и даже (поправьте если ошибаюсь) только с iOS… В общем, так же как во Flutter у них не получится сделать просто потому что бессмысленно, все равно в итоге все упирается в нативный UI.
Насчет Xamarin.Native не скажу.
Основная проблема xf — медленный интерфейс, медленный старт приложения. Рендеры — то такое, можно списать на издержки технологии, но вот что делать с перформансом, когда у тебя простенький список лагает на среднем телефоне двухлетней давности?
А вот с более медленным стартом приложения придется мириться, но тут у всего кроме натива будут проблемы. Xamarin Forms мы используем в основном для внутренних приложений, там где это будет не так критично. Например, внутренний документооборот, управление складами, курьерские приложения.
На стороне Xamarin огромное количество библиотек, как минимум. Найдите достойные аналоги для того же Autofac, Automapper.
При использовании Native подхода, мы можем оптимизировать рендеринг по-максимуму, не теряя ни капли производительности в сравнении с Java или iOS, причем 100% знаем как это работает, с flutter такое не пройдет.
Изучая SDK Android и iOS мы будем это реально использовать в Xamarin приложениях, соответственно переход от Xamarin на swift, java, kotlin — не проблема, как и обратный подход.
Что плохо — это визуальное накидывание интерфейса на iOS, но мы его и не используем, в команде сториборды — это ад, мы создаем интерфейс программно.
Прототип на Xamarin Forms написать намного быстрее и проще, все-таки XAML — это мощь.
Производительность Xamarin Forms на списках, за что его много хейтили, стала намного лучше сейчас, когда добавили CollectionView и наши клиенты не замечают разницы c приложениями на iOS и Java.
Плюс идет развитие Blazor, значит и SPA приложения можно будет писать на C#. Blazor мы уже опробовали, есть проблемы с производительностью, но мы были вполне довольны используя его для админок.
Но главная проблема Qt не в сложности написания нативного UI, главная проблема — C++.Qt на мобильных платформах — это QML, а там можно вообще всю логику писать на JS.
Ну и потом, C++ в Qt это по сути Си с классами. Вы, конечно, можете принести туда любую магию из новых стандартов, но это скорее противоречит духу библиотеки, чем требуется для работы. А фишки типа системы сигналов-слотов и обилие готовых подсистем на все случаи жизни ещё уменьшают сложность, даже для многопоточных приложений.
«Настоящая» главная проблема там в багах типа такого, вечных проблем с текстовыми полями, сложности в получении некоторых действительно нативных контролов и эффектов, например лупы из iOS. Но это относительно нативных приложений, у других кросс-платформенных фреймворков многое из этого тоже не решено.
Но главная проблема Qt не в сложности написания нативного UI, главная проблема — C++
Qt на мобильных платформах — это QML,
Ну если хочется кросплатформенности, то и на Desktop QML неплохо работает,
и во многом уже лучше Qt/Widgets к сожалению.
Так что я бы C++ назвал преимуществом, вряд ли ffi Dart также просто сделать
как интеграцию C++ и QML/JavsScript.
У Qt на мой взгляд другие проблемы:
- Намного слабее маркетинг
- Типизация, здесь Dart выигрывает по сравнению с QML, но вроде в Qt 6.x собираются поправить
- Направленность на "Embedded Linux", такое чувство что остальные платформы тестируются
намного меньше
Flutter, WPF/UWP/Avalonia, Qt (и, быть может, другие тулкиты, которы отрисовывают контроллы сами) имееют ряд преимуществ и недостатков. Преимущества расписаны, а к недостаткам я бы отнес тот факт, что им приходится мимикрировать под нативные. Разработчикам тулкитов требуется создавать разные наборы контроллов/темы под разные ОС (или, может, даже версии). И, видимо, это придется поддерживать в актуальном состоянии.
Также, замечу некую "философскую" проблему, которая, может, и не проблема для промышленного применения, но немного меня расстраивает. По-сути, выполняется двойная работа, разработчиками ОС и разработчиками тулкита по созданию контролов. А приложения раздуваются в размере засчет кода, аналог которому уже есть в ОС.
А можете поделиться ссылочкой на какое-нибудь приложение в сторе, которое хорошо сделано на flutter и совсем неотличимо от нативного UX?
apps.apple.com/US/app/id336698281?mt=8
play.google.com/store/apps/details?id=com.move.realtor&hl=en_US
Тем не менее, ставить такое приложение в showcase, мягко говоря, нечестно.
+ весь корпоративный софт на мой взгляд перейдет на Flutter)
Гугл не вкладывался в Kotlin до момента пока JetBrains не довели его до стабильного состояния. Да и вообще Kotlin не продукт Гугла, это самостоятельный продукт. Просто «повезло», так сказать.
Flutter не разменная монета. Flutter доказал что как продукт имеет очень существенный преимущества перед конкурентами. И если статья не убеждает в этом, то есть не-Васи, непредвзятые бэкенд разработчики (Phoenix_free), которым зашло.
Flutter доказал что как продукт имеет очень существенный преимущества перед конкурентами.Сколько продуктов отсюда этого не доказали?
killedbygoogle.com
Когда описание внешнего вида компонента идет отдельно от кода.
Что именно вы имеете в виду? Описание внешнего вида компонента – это в любом случае код. Он может быть написан на языке разметки, типа HTML/XML, а может на том же языке, что и остальной код приложения (и, как по мне, это гораздо удобнее и гибче).
А отделять бизнес-логику от UI – это всегда хорошая практика. И Flutter никак в этом не мешает.
Какое-то приложение, скачанное с Google Play тормозит… эка невидаль. Какая разница, на чем оно написано, без исходников "объяснить" почему кто-то написал тормозное приложение – ну так себе просьба.
А я вас помню – вы как-то обещали в следующей статье показать, какой Flutter тормоз. Будет статья с кодом?
P.S. мультиаккаунты же вроде были запрещены на хабре?
Не думал, что когда-нибудь придется объяснять такие вещи разработчику, но:
∃ ≠ ∀
Также (не хотел снова поднимать этот вопрос) существует только пара-тройка виджетов типа «Cupertino» для iOS во Flutter.
Вы хотели сказать пара десятков?
Почему замалчивают тот факт, что поддержки iOS виджетов во Flutter просто не существует?
Да вроде английским по белому написано, как работает система виджетов.
Расскажите это человеку, который оставил здесь комментарий на тему, как отклонили его приложение в Apple за не соответствие UI!
А где он писал, что его приложение отклонили? Есть какие-то пруфы? Зато есть вот такая официальная информация.
Ну и мой вопрос про статью вы проигнорировали. Ок. А, я так понял, что скрин какого-то приложения из Google Play – это и есть доказательство тормознутости.
Вы хотели сказать пара десятков?
Если быть точным — 11. А если отбросить элементы «Переключатель», который ничем не отличается от того же на Android, «Navigation bar», который на самом деле просто обычный список (не понятно, зачем его включили в раздел Cupertino), «Кнопки» (две), которые оказываются на самом деле просто RaisedButton и FlatButton из Android, «Activity indicator», который просто обычный спиннер, страшнючие текстовые поля (два), которые нормальный человек никогда не будет использовать в своем приложении, «Pull to refresh», который идентичен элементу в Android (опять же, не понятно, зачем его включали в раздел Cupertino), — то можете сами посчитать, сколько там виджетов для iOS. Я написал то, что увидел в официальном демо приложении от 2020 года.
Мне Flutter тоже зашел, но что касается производительности, я взял стандартное демо приложение с каунтером, добавил туда Drawer с картинкой в шапке и когда пытаюсь его открыть через кнопку в аппбаре, то когда он выезжает первый раз он заметно лагает.
Стандартная аппликуха, которая делается при create myapp плюс в ней Drawer виджет с ListView, у которого в шапке картинка (через BoxDecoration и DecorationImage виджеты) и пару Row(children:[Text("lala")]. Т.е. косячить там негде, все сделано, как описано в доках.
Там, возможно, в кишках нет прелоада ресурсов и он картинку с диска читает и декодит в момент первого открытия drawer-а, я хз. Лагает только при первом открытии, дальше все ок.
flutter run --release
Результат (iPhone XR):
Причем картинка 3.8 мб, специально
Да, кажется, это я лоханулся. Я привык работать в дебаг версии :) И в ней Drawer лагает знатно, а вот в release версии перестает лагать :)
А пока… побеждает React Native )
Плюс, надо отметить, что в Штатах все-таки бизнес в срезе это малые и средние предприятия, в отличии от России, поэтому стоимость разработки важна.
Например, количество мелких багов скорее будут отражать популярность, а не стабильность.
Я согласен, одного моего мнения недостаточно для статистики, однако есть стойкое ощущение, что это именно так — флаттер стабильнее реакт нейтив.
Несогласным предлагаю попробовать оба фреймворка лично — возможно, вам повезёт больше.
Если же говорить об инфраструктуре — качество плагинов для IDE, отладчика и т.д., то тут даже опираться на ощущения не надо — у флаттера они объективно лучше.
Я измерял в количестве багов фреймворка, с которыми встретился, за единицу времени
Это как в англоязычном высказывании — «plural of anecdote is not data». Измерять стабильность фреймворка только по себе — это совсем неправильно.
Однако я занимался разработкой мобильных приложений с использованием обоих фреймворков достаточно длительное время и за это время у меня сложилось чёткое ощущение, что флаттер стабильнее, разрабатывать с ним удобнее, а результат, в среднем, получается лучше.
Я могу долго (и нудно) рассказывать, почему это так, но делать этого не буду, потому что личный опыт гораздо важнее — попробуйте их сами и сделайте выводы.
Иногда Apple не пропускает Flutter приложения в стор — пишут что приложение не использует нативные элементы управления.
Иногда Apple не пропускает Flutter приложения в стор — пишут что приложение не использует нативные элементы управления.Это довольно голословно. Хотелось бы увидеть пруфы.
Flutter сейчас — очень сырой продукт. В теории все классно, на практике — постоянно проблемы.Опять же, хотелось бы больше специфики. В моей практике все с точностью да наоборот.
Смотря что считать "готовым для продакшна". У нас приложение уже полгода в продакшне, Apple ни разу не отклонила по этой причине.
Эпл никогда не использовал WebView!!! Был UIWebView, сейчас его заменяют WKWebView.
А вообще — я за нейтив разработку для iOS :)
Flutter побеждает ровно до тех пор, пока не требуется сделать что-то, что использует что-то более сложное, чем список товаров в приложении, подтянутый с API. Не говоря уже о том, насколько сильно Flutter отличается от нативных приложений в плане look-and-feel. За Андроид говорить не берусь, использую телефон на Android'е только как тестовое устройство, но на iOS Flutter ощущается, будто кто-то очень и очень удачно замаскировал WebView под нативное приложение, и это очень неприятно. Но буду честен, я видел множество нативных приложений, от которых у меня были похожие ощущения, и над парой из них мне даже удалось поработать.
Не говоря уже о том, что у всех подобных кроссплатформенных библиотек всегда есть три фундаментальные проблемы:
1. Они всегда играют в догонялки с платформой, которую они пытаются абстрагировать
2. Они добавляют еще один весьма крупный слой, на котором может пойти что-то не так.
3. Ограниченный выбор библиотек — некоторые находятся на очень ранней стадии развития, некоторые просто отсутствуют в силу особенностей платформы, некоторые приходится адаптировать самому, прописывая платформоспецифичный код для каждой из них (уменьшая выгоду по времени от кроссплатформенности и добавляя еще один слой, на котором может что-то пойти не так)
Да, какому-то бизнесу Flutter подходит идеально — у них нет нужды строить хорошее приложение, и «подешевле-побыстрее» является основным критерием. Но называть бы это победой я не стал.
Но буду честен, я видел множество нативных приложений, от которых у меня были похожие ощущения, и над парой из них мне даже удалось поработать.
Т.е. это не проблема флаттера.
Они добавляют еще один весьма крупный слой, на котором может пойти что-то не так.
Один добавляют, другой могут и убрать. Например, учитывая, что Flutter, грубо говоря, берет от системы только канвас и рисует весь интерфейс на нем, приложение будет одинаково выглядеть и вести себя и на 10, и на 5 андроиде. И посколько UI слой от системы не зависит, как только новый компонент добавляется во Flutter, он становится доступным на всех версиях системы автоматически.
Вообще, имхо, отделить UI слой от OS – это здравая идея.
некоторые приходится адаптировать самому, прописывая платформоспецифичный код для каждой из них
Ну так этот код все равно бы пришлось писать.
Да, какому-то бизнесу Flutter подходит идеально — у них нет нужды строить хорошее приложение, и «подешевле-побыстрее» является основным критерием.
Нативное != хорошее, подешевле-побыстрее != хуже.
Они всегда играют в догонялки с платформой, которую они пытаются абстрагировать
Да, здесь согласен. Это надо учитывать и решать, насколько это критично. Потому что может оказаться, что этот супер-новый компонент нативно доступен только в условном Андроиде 31, до которого в ближайшие пару лет обновятся только 5% ваших пользователей, и без костылей на предыдущих версиях его все равно не сделать.
Т.е. это не проблема флаттера.
Да нет, это все еще проблема флаттера. Чтобы нативное приложение выглядело ненативно и ощущалось так же, разработчикам приходится стараться, чтобы сделать плохо (в основном с подачи менеджеров и дизайнеров, которые не понимают/не хотят понимать разницы между платформами и не хотят читать гайдлайны по UI для этих платформ). В случае с флаттером же приходится стараться, чтобы оно выглядело и ощущалось как нативное.
Например, учитывая, что Flutter, грубо говоря, берет от системы только канвас и рисует весь интерфейс на нем, приложение будет одинаково выглядеть и вести себя и на 10, и на 5 андроиде.
С этим прекрасно справляется AndroidX. В случае же с iOS, напротив, нежелательно, чтобы системные компоненты на разных версиях iOS — как минимум выглядит неопрятно, как максимум — запутывает пользователя. Так что в данном случае Флаттер вряд ли «может и убрать».
Нативное != хорошее, подешевле-побыстрее != хуже.
Абсолютно верно! В теории это не так. На практике же зачастую именно так и выходит. И, опять же, на хорошо сделанное ненативное приложение может быть потрачено намного больше человекочасов, чем могло бы быть потрачено на две платформы просто потому, что помимо проблем платформы приходилось решать еще и проблемы кроссплатформенного фреймворка.
Ну так этот код все равно бы пришлось писать.
Конечно. Вот только к этому коду еще и плагин писать, и этот код можно было бы писать без оглядки на:
а) вторую платформу
б) объединяющего их интерфейса/плагина
Потому что может оказаться, что этот супер-новый компонент нативно доступен только в условном Андроиде 31, до которого в ближайшие пару лет обновятся только 5% ваших пользователей, и без костылей на предыдущих версиях его все равно не сделать.
Я немного не про то. Скажем, в новой версии iOS поменяли то, как выглядит диалоговое окно — например, теперь оно стало шириной с весь экран, и кнопка, означающая «разрушительное» действие всегда будет помещена системой в самый конец списка кнопок. В предыдущей версии, например, было наоборот. Если вдруг разработчики флаттера сделали самописный диалог, а не просто вызов UIAlertController, я получу неконсистентное поведение — во всей системе «разрушительная кнопка» внизу, а во флаттере до обновления она все еще вверху. Чтобы это исправить, мне придется обновлять версию флаттера, и заново выпускать новую версию. А с этим обновлением я получу корректное поведение для пользователей более новой системы, но некорректное — для пользователей более старой. Не говоря уже о том, что обновление версии флаттера может нести в себе множество других сюрпризов — например, сломается другая критическая часть приложения.
В случае с флаттером же приходится стараться, чтобы оно выглядело и ощущалось как нативное.
Я бы так не сказал. Т.е. он, конечно, подталкивает к тому, чтобы использовать везде Material Design, но база Cupertino компонентов вполне себе неплохая, и можно сделать iOS версию только с ними, и будет смотреться вполне себе нативно без всяких дополнительных усилий со стороны разработчика.
С этим прекрасно справляется AndroidX
Ну я бы не сказал, что прекрасно. В плане Material Design – может быть, в плане сильно кастомного UI – помощи не так уж много. Да что там говорить, за все эти годы поддержку нормальных теней в Андроид так и не завезли.
И, опять же, на хорошо сделанное ненативное приложение может быть потрачено намного больше человекочасов, чем могло бы быть потрачено на две платформы просто потому, что помимо проблем платформы приходилось решать еще и проблемы кроссплатформенного фреймворка.
А может быть и не потрачено? У нас приложение на флаттере уже полгода в production. Ничего сложного, обычное бизнес-приложение, но:
- Качество при переходе от 2 нативных к одному кросс-платформенному не пострадало (в большинстве случаев улучшилось).
- Времени мы тратим гораздо меньше.
Конечно. Вот только к этому коду еще и плагин писать, и этот код можно было бы писать без оглядки на:
а) вторую платформу
б) объединяющего их интерфейса/плагина
Так если вам на второй платформе эта функциональность не нужна, и не пишите. Плагин – да, какой-то оверхед принесет. Но при хорошей модульной архитектуре оверхед не будет большим. Понятно, что если у вас 90% приложения завязано на специфичные для платформы вещи, то от флаттера толку, скорее всего, не будет.
Скажем, в новой версии iOS поменяли то, как выглядит диалоговое окно
It depends. В некоторых случаях возможность контролировать, как у меня выглядит интерфейс – это плюс.
Я бы так не сказал. Т.е. он, конечно, подталкивает к тому, чтобы использовать везде Material Design,
Я бы на месте эппл разворачивал МП с material из AppStore.
Что тут можно сказать, хорошо, что вы не на месте эппл.
На вкус и цвет фломастеры разные. Я не фанат MD, но и отвращения он у меня не вызывает.
Среди которых есть следующее:
Consistency
A consistent app implements familiar standards and paradigms by using system-provided interface elements, well-known icons, standard text styles, and uniform terminology. The app incorporates features and behaviors in ways people expect.
Material Design на iOS это нарушает.
"keep the following principles in mind" != "strictly follow principles"
Да, MD не использует "system-provided interface elements", но много вы знаете приложений, которые используют только "system-provided interface elements"? Блокировать их?
При этом, заметьте, флаттер предоставляет возможность использовать элементы, соответствующие HIG.
Так что, "не к месту" – отчасти, да, "уродливо" – вкусовщина.
Но Flutter работает иначе.
Виртуальная машина используется в Flutter только для отладки.
Благодаря ей вы можете менять код на лету и видеть результат.
При окончательной компиляции всё компилируется в native. И никакой виртуальной машины Dart и её тормозов нет у конечного пользователя.
Которая показывает что подразумевают, когда говорят о Dart VM. При этом, как написано выше, даже с AOT все равно загружается stripped precompiled runtime, в котором все равно есть GC.
При этом, как написано выше, даже с AOT все равно загружается stripped precompiled runtime, в котором все равно есть GC.
Garbage Collector неотемлимая часть нативных приложений для Android. Что такого в GC?
как и все GC, GC в Dart VM имеет поколения
Не все. Только, внезапно, generational gc имеют поколения.
Go, например, не имеет поколений в своём GC.
Android Runtime, хоть и generational, но не выделяет новые объекты в отдельной области памяти, а просто хранит их на стеке.
Рано. Для веба пока – только поиграться. Но прогресс есть.
Зашёл в Купертино библиотеку элементов и мгновенны вижу разницу между нативными элементами и вариантами от Флаттер. Даже не помня некоторые элементы, сразу видны огрехи: межстрочные интервалы, отступы, цвета, паддинги, маржины, толщина шрифта, его отображение. Да, это всего-то px туда, px сюда, но из этих мелочей складывается общий привычный платформе UX. Пока ниразу не видел приложений, про которые я бы сказал «Ну все, Нейтив больше не нужен».
flutter разработчик — 58
react native разработчик — 303
android разработчик — 1 621
ios разработчик — 1 488
Если и побеждает, то не на территориии РФ.
Количество вакансий на xx:
flutter разработчик — 58
react native разработчик — 303
android разработчик — 1 621
ios разработчик — 1 488
Если и побеждает, то не на территориии РФ.
Знать именно конкретную технологию — это важно разве что в самом-пресамом начале карьеры. Ибо желающих возиться с тобой и тянуть твое развитие очень мало. Нужно чтобы ты сразу пришёл и смог вписаться работу.
А вот потом, когда тебе доверяют полностью самостоятельную разработку или, тем паче, руководство разработкой — всё меняется.
Ну я вот уже лет 20 как делаю на тех технологиях что лично мне удобнее для работы.
По сути, заказчика интересует конечный продукт, а не способ реализации.
И если Flutter мне позволяет повысить производительность (особенно при кросс-платформенной разработке; да и при разработке на одну платформу), то цифры вакансий значения не имеют.
Что до нанимаемых мною людей… Мне всегда важно было какой ты программист, а не насколько ты хорошо знаком с конкретной платформой. Разработка она, по сути, одинакова в смежных технологиях. Хороший разработчик осваивает азы Dart и Flutter за неделю после чего производоительность только растет. И уже ко второму месяцу он уже продуктивен неотличимо от того, кто работает год на этой технологии. Если это хороший разработчик, конечно.
Впрочем, и нулевых людей «со школы и универа» тоже брал и достаточно быстро подтягивал до минимально приемлимого уровня, чтобы уже они начинали окупаться.
Конечно, если проект ограничен жесткими сроками этого делать не получится. Но если имеются постоянно-повседневные работы, если у предприятия достаточный стабильный объем заказов, то предприятие нисколько не напрягает взять разработчика без знания стека.
Жесткие требования к стеку важны при следующих условиях: или очень мелкое предприятие или очень ответственный или очень срочный заказ или откровенно бодишопная соковыжималка или ты сразу хочешь много денег и не согласен получать как ученик первый месяц.
Ну и, разумеется, в самом начале карьеры выбора у тебя меньше.
Однако, повторюсь, большой опыт разработки на других стеках я ставлю выше, чем маленький опыт, но на нужной мне платформе. В применении к Flutter'у: конкретно Dart+Flutter — это вовсе никакой не Хаскель — и освоить Flutter человеку с опытом совсем не сложно.
Разрабатывать можно на любом – используя эмулятор Андроида. Для сборки под iOS – да, в любом случае нужен mac (iPhone не особо нужен, можно обойтись симулятором в большинстве случаев), хотя можно воспользоваться облачным решением для сборки, например, https://codemagic.io/
В общем, с маком будет удобнее, но в теории можно обойтись и без него.
Посмотрите про флаттер недавний пост от медузы и почитайте комменты.
Недавно отписался от какой то группы в телеграме, которая приводила типа статистику, поднялись продажи на такие то товары, типа на одежду. Потом читаю новости продажи по одежде просели максимально сильно. В общем тут кто-то врет, я подумал что все таки маркетологи из этого телеграм канала, ну они писали типа на wildberries выросли продажи на 600% одежды и т.п. в общем тут из той же серии. Почему Flatter побеждает. Ну вот не знаю. Тоже к нему присматриваюсь, присматриваюсь. Но вот схожесть с React меня почему то от него отталкивает. Простите меня любители react. Я просто сторонник Ractive,Vue, и вот это вот все.
Так вот, тут недавно была статья про медузу, что на флаттер написана, ну я скачал, упс, оказывается скачал старое приложение нативное, якобы. Но нативное там скорее всего только WebView остальное уже HTML, потому что тормозит оно ужасно ( ну там сверху значит, у нас вышло новое приложение, нажми чтобы скачать, ну я скачал, да, поновее. И тем самым я смог сравнить то и другое. Первое жутчайше тормозит при скролле вверх вниз. Второе на Flatter при скролле как то странно скроллится, не естественно и тоже подергиваясь, но как то более линейно чем «нативное». анимация открыти окон вроде ничего, нормально все отрабатывала, шрифты красиво, в целом все хорошо, но вот скролл какой то странный все же. Может быть конечно у них только так, но я когда первые Hello world'ы собирал, тоже не особо скоростью радовало, особенно вначале.
Еще во Flutter какой-то ад с темами. К примеру, для слайдера можно в общей теме переопределить sliderTheme, а когда это делаешь для buttonTheme, то часть работает (height), а часть нет (цвета, отступы). При этом документация на голубом глазу говорит, что можно переопределять что хочешь. И только в issue tracker-е расскажут, что есть такая давняя проблема, разрабы о ней знают, обещают большой рефакторинг, который исправит ситуацию, но в документации почему-то об этом молчат.
Пример с картами — это как раз та ниша, где phoneGap уместен.
Для каждого инструмента своя ниша. Для приложения где оптимизация не важна эта технология вполне подходит, но для серьезного проекта есть куда лучшие варианты (Натив, Xamarin, Flutter, React Native).
Извиняюсь, что пишу про тормоза, но просто это решающий момент, почему разработчикам все еще приходится писать нативно.
Почему Flutter побеждает?