Возвращаясь к теме с каруселью.. Возникла проблема с тем, что PageView требует фиксированного размера и не умеет отображать дочерние виджеты, которые имеют разные размеры. И из-за неадаптивных значений получалось, что на разных устройствах (которые соответственно имеют разные диагонали экрана) возникали траблы. Где-то pixel overflow, где-то наоборот пустое пространство. И это при том, что размеры были заданы посредством MediaQuery.👾
Конечно, это надо было решать. Первое что я пошел делать - гуглить. На StackOverflow с возможными вариантами решения долго не стал сидеть, решил пойти на pubdev, чтобы узнать может кто-то уже выложил лучший вариант? (Ведь задача довольно типовая). И действительно, нашел пакет с PageView, где необязательно указывать размеры, он адаптивен. Однако указывать dependency в pubspec.yaml не очень хотелось (Ведь он обновлялся в последний раз 22 месяца назад) - поэтому просто открыл репозиторий с этим проектом, вырезал нужный код, обновил устаревшие участки и добавил к себе в проект.
Ссылка на оригинальный проект: https://pub.dev/packages/expandable_page_view
Гитхаб автора: https://github.com/Limbou
Автор проделал хорошую работу.👏👏
Ссылка на мой гитхаб с вырезанным кодом: https://github.com/GereyTatarkhanov/widget_gallery
Теперь нет проблемы с тем, что содержимое может не поместиться в скроллящийся item (ведь фиксированные значения не задаются), а также все items могут иметь абсолютно разные размеры - PageView, а соответственно Carousel будет подстраиваться (Да, я добавил ExpandablePageView в Carousel тоже).
Конечно, это надо было решать. Первое что я пошел делать - гуглить. На StackOverflow с возможными вариантами решения долго не стал сидеть, решил пойти на pubdev, чтобы узнать может кто-то уже выложил лучший вариант? (Ведь задача довольно типовая). И действительно, нашел пакет с PageView, где необязательно указывать размеры, он адаптивен. Однако указывать dependency в pubspec.yaml не очень хотелось (Ведь он обновлялся в последний раз 22 месяца назад) - поэтому просто открыл репозиторий с этим проектом, вырезал нужный код, обновил устаревшие участки и добавил к себе в проект.
Ссылка на оригинальный проект: https://pub.dev/packages/expandable_page_view
Гитхаб автора: https://github.com/Limbou
Автор проделал хорошую работу.👏👏
Ссылка на мой гитхаб с вырезанным кодом: https://github.com/GereyTatarkhanov/widget_gallery
Теперь нет проблемы с тем, что содержимое может не поместиться в скроллящийся item (ведь фиксированные значения не задаются), а также все items могут иметь абсолютно разные размеры - PageView, а соответственно Carousel будет подстраиваться (Да, я добавил ExpandablePageView в Carousel тоже).
❤2
Такс, я тут прошелся по документации к Firebase Cloud Messaging. И сделал краткую выдержку из наиболее интересных пунктов. Если я ошибся где-то или упустил что-то важное - исправьте в комментариях!
Начнем с определения - Firebase Cloud Messaging (FCM) - это кроссплатформенное решение для отправки сообщений и уведомлений на мобильные устройства. Т.е. с помощью него мы можем настроить отправку push или in-app сообщений на устройства пользователей.
Какие есть фичи:
1. Развертываемые сообщения (Collapsible Messages): FCM позволяет отправлять развертываемые сообщения, которые представляют собой последнее отправленное уведомление. Если устройство не может моментально обработать уведомление (выключен, нет интернета), оно будет обновлено с новым содержанием.
Данная конфигурация подходит, к примеру, для звонков внутри приложения. Ведь они имеют кратковременную актуальность. И после неотвеченного звонка, можно поменять содержание пуш-нотификации.
2. Ограниченные по времени сообщения (Time-to-Live Messages): Разработчики могут настроить время жизни для уведомления, которое определяет, сколько времени уведомление останется активным, прежде чем будет автоматически удалено.
3. Общие для всех платформ сообщения (Cross-platform Messages): С помощью FCM можно отправлять уведомления, которые будут отображаться на всех поддерживаемых платформах (Android, iOS, Web).
4. Уникальные для всех платформ сообщения (Platform-specific Messages): Разработчики могут отправлять уведомления, которые определены только для конкретной платформы (Android, iOS, Web).
5. Аналитика (Analytics): FCM предоставляет различные инструменты аналитики, позволяющие отслеживать успешность отправленных уведомлений, количество устройств, на которые были отправлены уведомления, статистику открытий уведомлений и многое другое.
Это крайне полезная фича для правильной настройки таргетинга. Представьте себе, что пользователь после месяца пользования приложением перестанет им пользоваться, а ему все еще будут отправляться сообщения. А теперь представьте, что таких пользователей (или уже непользователей. Да-да, каламбур.) тысячи. Невыгодно, правда? Так вот, вы можете отследить актуальные токены и отправлять сообщения только им. Это поможет тратить меньше ресурсов.
6. Отправка уведомлений при включенном VPN: FCM поддерживает отправку уведомлений даже при включенном VPN у пользователя. VPN не должен блокировать доставку уведомлений через FCM.
7. In-App сообщения: FCM позволяет отправлять уведомления не только на устройства (Push notifications), но и внутри приложений (In-App Messages). Это удобный способ взаимодействия с пользователями и повышения их вовлеченности.
К примеру, вы можете отправить курьеру, который в данный момент сидит в приложении сообщение о новом заказе и настроить появление окна (или баннера, или вообще на что хватит у вас фантазии) уведомляющем об этом.
Подводя итог, можно сказать, что данный сервис очень мощный и при грамотном использовании можно даже создать классный и быстрый мессенджер!
Начнем с определения - Firebase Cloud Messaging (FCM) - это кроссплатформенное решение для отправки сообщений и уведомлений на мобильные устройства. Т.е. с помощью него мы можем настроить отправку push или in-app сообщений на устройства пользователей.
Какие есть фичи:
1. Развертываемые сообщения (Collapsible Messages): FCM позволяет отправлять развертываемые сообщения, которые представляют собой последнее отправленное уведомление. Если устройство не может моментально обработать уведомление (выключен, нет интернета), оно будет обновлено с новым содержанием.
Данная конфигурация подходит, к примеру, для звонков внутри приложения. Ведь они имеют кратковременную актуальность. И после неотвеченного звонка, можно поменять содержание пуш-нотификации.
2. Ограниченные по времени сообщения (Time-to-Live Messages): Разработчики могут настроить время жизни для уведомления, которое определяет, сколько времени уведомление останется активным, прежде чем будет автоматически удалено.
3. Общие для всех платформ сообщения (Cross-platform Messages): С помощью FCM можно отправлять уведомления, которые будут отображаться на всех поддерживаемых платформах (Android, iOS, Web).
4. Уникальные для всех платформ сообщения (Platform-specific Messages): Разработчики могут отправлять уведомления, которые определены только для конкретной платформы (Android, iOS, Web).
5. Аналитика (Analytics): FCM предоставляет различные инструменты аналитики, позволяющие отслеживать успешность отправленных уведомлений, количество устройств, на которые были отправлены уведомления, статистику открытий уведомлений и многое другое.
Это крайне полезная фича для правильной настройки таргетинга. Представьте себе, что пользователь после месяца пользования приложением перестанет им пользоваться, а ему все еще будут отправляться сообщения. А теперь представьте, что таких пользователей (или уже непользователей. Да-да, каламбур.) тысячи. Невыгодно, правда? Так вот, вы можете отследить актуальные токены и отправлять сообщения только им. Это поможет тратить меньше ресурсов.
6. Отправка уведомлений при включенном VPN: FCM поддерживает отправку уведомлений даже при включенном VPN у пользователя. VPN не должен блокировать доставку уведомлений через FCM.
7. In-App сообщения: FCM позволяет отправлять уведомления не только на устройства (Push notifications), но и внутри приложений (In-App Messages). Это удобный способ взаимодействия с пользователями и повышения их вовлеченности.
К примеру, вы можете отправить курьеру, который в данный момент сидит в приложении сообщение о новом заказе и настроить появление окна (или баннера, или вообще на что хватит у вас фантазии) уведомляющем об этом.
Подводя итог, можно сказать, что данный сервис очень мощный и при грамотном использовании можно даже создать классный и быстрый мессенджер!
🔥1
Народ. Кто ждал новости с Google IO о Flutter.
Если коротко: по словам спикера Flutter Web стал быстрее в 2 раза благодаря wasm.
Все.
И как отступление от темы. Используйте Project IDX, чтобы ios на windows дебажить
Если коротко: по словам спикера Flutter Web стал быстрее в 2 раза благодаря wasm.
Все.
И как отступление от темы. Используйте Project IDX, чтобы ios на windows дебажить
👍1
Как уже известно, ProjectIDX стал для всех доступен. Для тех, кто в танке: это такой облачный IDE, который работает из браузера, с собственными эмуляторами/симуляторами и прочими виртуальными устройствами, включительно Web(Ага, пишем Web в Web'е), который был разработан компанией Google.🫡
И, конечно, он включает в себя интеграцию со всеми актуальными сервисами Google, с такими как Firebase и его Crashlytics, а также AI Gemini (Это конкурент сына маминой подруги в мире ИИ - GPT от OpenAI). Кстати, как можете наблюдать на скриншотах - в РФ его нельзя юзать: санкции там, все дела. We are illegal! 🚫
Я решил его затестить, ну ведь очень интересно было с винды запустить симулятор ios устройства (и не надо мне говорить, что по факту запускается все на удаленном железе, я и сам знаю. Вас проверял..). Так, вот.. Не получилось. Хах!😁 Обо всем по порядку.
Как только зарегистрировался на сайте и создал виртуальное пространство, предварительно указав, что буду разрабатывать проект на фреймворке Flutter (к слову, там стоит самая актуальная версия на момент публикации этого поста: Flutter 3.22 и Dart 3.4.0) - меня встретил VSCode прямо в браузере (Неожиданно очень шустро работающий как для ide внутри браузера). Это тот же самый VSCode, который у тебя прямо сейчас стоит на ПК, т.е. ты можешь его кастомизировать, менять темы, устанавливать extensions (ну плагины...учи английский) и т.д.
Сразу запустились превью с Web и Android, где я затестил дефолтное приложение с текстом "Hello World". Компилируется не долго, я бы даже сказал быстро (опять таки, учитываем, что это все в облаке). Отмечу, что Android эмулятор сильно лагал, а Web вообще заработал только после перезапуска виртуального пространства (пришлось перезапустить idx). Но все работает!
И тут, я пошел переключать устройство, с которого буду запускать код на ios симулятор и вот незадача: Его нет! И в документации тоже ничего об этом не нашел, там инфа только про Web и Android. Тут два варианта: либо ios симуляторы еще не завезли, либо просто я не нашел инфу о том, как его включить (Хотя я искал не только в доках).
Android эмуляторов среди доступных устройств - два. Планшет и смартфон. Также можно по желанию добавить линукс проект (ага, это я нашел).
Еще, как видно на скриншоте, я и со своего смартфона запустил ProjectIDX и заметил интересную штуку: если взаимодействовать с эмулятором (ну дёргать его если.. тыкать там куда-то), то в режиме реального времени это все происходит и на другом устройстве (в моем случае на ноуте), где открыт тот же проект с тем же эмулятором. Похоже оно работает как трансляция 📹, я сильно не вникал.
Итог: ProjectIDX очень крутая и перспективная технология, но пока ещё сыровата. Оно и понятно, ведь ide совсем недавно стало доступно для массового пользователя.🤷♂️
Такие дела...Если кто знает что там с ios, то пишите в комментах.
И, конечно, он включает в себя интеграцию со всеми актуальными сервисами Google, с такими как Firebase и его Crashlytics, а также AI Gemini (Это конкурент сына маминой подруги в мире ИИ - GPT от OpenAI). Кстати, как можете наблюдать на скриншотах - в РФ его нельзя юзать: санкции там, все дела. We are illegal! 🚫
Я решил его затестить, ну ведь очень интересно было с винды запустить симулятор ios устройства (и не надо мне говорить, что по факту запускается все на удаленном железе, я и сам знаю. Вас проверял..). Так, вот.. Не получилось. Хах!😁 Обо всем по порядку.
Как только зарегистрировался на сайте и создал виртуальное пространство, предварительно указав, что буду разрабатывать проект на фреймворке Flutter (к слову, там стоит самая актуальная версия на момент публикации этого поста: Flutter 3.22 и Dart 3.4.0) - меня встретил VSCode прямо в браузере (Неожиданно очень шустро работающий как для ide внутри браузера). Это тот же самый VSCode, который у тебя прямо сейчас стоит на ПК, т.е. ты можешь его кастомизировать, менять темы, устанавливать extensions (ну плагины...учи английский) и т.д.
Сразу запустились превью с Web и Android, где я затестил дефолтное приложение с текстом "Hello World". Компилируется не долго, я бы даже сказал быстро (опять таки, учитываем, что это все в облаке). Отмечу, что Android эмулятор сильно лагал, а Web вообще заработал только после перезапуска виртуального пространства (пришлось перезапустить idx). Но все работает!
И тут, я пошел переключать устройство, с которого буду запускать код на ios симулятор и вот незадача: Его нет! И в документации тоже ничего об этом не нашел, там инфа только про Web и Android. Тут два варианта: либо ios симуляторы еще не завезли, либо просто я не нашел инфу о том, как его включить (Хотя я искал не только в доках).
Android эмуляторов среди доступных устройств - два. Планшет и смартфон. Также можно по желанию добавить линукс проект (ага, это я нашел).
Еще, как видно на скриншоте, я и со своего смартфона запустил ProjectIDX и заметил интересную штуку: если взаимодействовать с эмулятором (ну дёргать его если.. тыкать там куда-то), то в режиме реального времени это все происходит и на другом устройстве (в моем случае на ноуте), где открыт тот же проект с тем же эмулятором. Похоже оно работает как трансляция 📹, я сильно не вникал.
Итог: ProjectIDX очень крутая и перспективная технология, но пока ещё сыровата. Оно и понятно, ведь ide совсем недавно стало доступно для массового пользователя.🤷♂️
Такие дела...Если кто знает что там с ios, то пишите в комментах.
❤2
Как и ожидалось, после появления макросов в Dart - data class себя долго ждать не заставил (Но правда пока не от самой команды Flutter).
Автор библиотеки Bloc уже успел выложить свое решение на pubdev и github:
https://pub.dev/packages/data_class_macro
https://github.com/felangel/data_class
Автор библиотеки Bloc уже успел выложить свое решение на pubdev и github:
https://pub.dev/packages/data_class_macro
https://github.com/felangel/data_class
Dart packages
data_class_macro | Dart package
Experimental support for data classes in Dart using pkg:macros
👍2
На типовой вопрос существует типовой ответ😁
Но думается мне, автор вопроса не то имел ввиду..
https://youtu.be/9x_z-AWK7P0?si=9_t9v0gCSykSQtQE
Но думается мне, автор вопроса не то имел ввиду..
https://youtu.be/9x_z-AWK7P0?si=9_t9v0gCSykSQtQE
😁2
Копался в файле framework.dart и случайно наткнулся на комментарий, где было написано, что:
Объекты BuildContext на самом деле являются объектами Element. Интерфейс BuildContext используется для предотвращения прямого манипулирования объектами Element.
Документация это подтверждает слово в слово.
Ссылка: https://api.flutter.dev/flutter/widgets/BuildContext-class.html
Я почему-то думал, что это разные, но взаимосвязанные вещи, а не, что одно интерфейс для другого.
Объекты BuildContext на самом деле являются объектами Element. Интерфейс BuildContext используется для предотвращения прямого манипулирования объектами Element.
Документация это подтверждает слово в слово.
Ссылка: https://api.flutter.dev/flutter/widgets/BuildContext-class.html
Я почему-то думал, что это разные, но взаимосвязанные вещи, а не, что одно интерфейс для другого.
👍2
Очень часто вижу, что люди БОЯТСЯ показывать свой код другим. У всех сомнения: а можно ли так писать? а это правильно? не будет ли никто надо мной смеяться?
А когда все таки решают показать, сначала следует сопроводительная фраза, что-то по типу: "строго не ругайте за мой колхозный код". Уже все настолько привыкли, что за любой код, который выложили на общее обозрение, им прилетит несколько камней от "опытнейших сеньоров" с указанием того, какое их код днище🕳
Да, есть определенные шаблоны программирования, которых желательно придерживаться. Да, принципы SOLID, DRY, KISS, YAGNI (etc) надо соблюдать насколько это возможно. Да, есть правила и негласные договоренности, которые надо учитывать. Но это НЕ ЗНАЧИТ, ЧТО У ВСЕХ ДОЛЖЕН БЫТЬ ОДИНАКОВЫЙ КОД.
Для каждого частного случая (если это не мега-типовая задача, которая уже миллион раз была решена) могут быть свои уникальные решения. Более того, может быть такое, что ты и твой коллега с другого конца света можете абсолютно разными путями решить одну и ту же проблему и не факт, что у кого-то "более правильный" вариант.
Если ты написал плохой код - ты поймешь, что ты написал плохой код позже. Ты либо сам споткнешься об него; либо прочитаешь статью (документацию) и поймешь как сделать лучше чем есть; либо тебе объяснят более опытные люди (объяснят, а не закидают камнями). Если кто-то скинул тебе стикер с человечком, который бьет себя по лицу, показывая "какой треш" и не аргументирует, то скорее всего он сам не понимает, как делать "правильно".
Изучай паттерны, учи архитектуру, ПОНИМАЙ для чего тебе та или иная архитектура и перестань наконец бояться, что ты неправильно обычный print в коде написал и кто-то тебе об этом скажет.
А когда все таки решают показать, сначала следует сопроводительная фраза, что-то по типу: "строго не ругайте за мой колхозный код". Уже все настолько привыкли, что за любой код, который выложили на общее обозрение, им прилетит несколько камней от "опытнейших сеньоров" с указанием того, какое их код днище🕳
Да, есть определенные шаблоны программирования, которых желательно придерживаться. Да, принципы SOLID, DRY, KISS, YAGNI (etc) надо соблюдать насколько это возможно. Да, есть правила и негласные договоренности, которые надо учитывать. Но это НЕ ЗНАЧИТ, ЧТО У ВСЕХ ДОЛЖЕН БЫТЬ ОДИНАКОВЫЙ КОД.
Для каждого частного случая (если это не мега-типовая задача, которая уже миллион раз была решена) могут быть свои уникальные решения. Более того, может быть такое, что ты и твой коллега с другого конца света можете абсолютно разными путями решить одну и ту же проблему и не факт, что у кого-то "более правильный" вариант.
Если ты написал плохой код - ты поймешь, что ты написал плохой код позже. Ты либо сам споткнешься об него; либо прочитаешь статью (документацию) и поймешь как сделать лучше чем есть; либо тебе объяснят более опытные люди (объяснят, а не закидают камнями). Если кто-то скинул тебе стикер с человечком, который бьет себя по лицу, показывая "какой треш" и не аргументирует, то скорее всего он сам не понимает, как делать "правильно".
Изучай паттерны, учи архитектуру, ПОНИМАЙ для чего тебе та или иная архитектура и перестань наконец бояться, что ты неправильно обычный print в коде написал и кто-то тебе об этом скажет.
🔥3
Народ, копался в Kotlin docs (не, не перехожу на native, просто его тоже знать полезно для Flutter разработчика, кстати) и заметил, что
там есть раздел Kotlin Wasm. Не знаю давно ли они его готовят, но то, что готовят - это факт. Правда пока что Alpha версия.
Даже пример сайта есть на Compose Multiplatform + Kotlin Wasm (по мне так очень корявый пока что). Кликни сюда, чтоб посмотреть.
Если ты не знаешь, что такое WebAssembly (wasm) - можешь прочитать в этой статье.
Напомню, что на прошедшей конференции Google IO команда Flutter тоже представила Flutter wasm (и пока в этой гонке находится впереди), на которую возлагает большие надежды.
В целом, данная технология должна сильно улучшить производительность Flutter Web и помочь сделать выбор в пользу Flutter тем, кто собирается писать web-приложения, а команда Kotlin хотят помешать и забрать себе этот кусок пирога! Ну а как мы знаем, конкуренция это хорошо, это заставит каждую из команд сделать свой продукт лучше!
там есть раздел Kotlin Wasm. Не знаю давно ли они его готовят, но то, что готовят - это факт. Правда пока что Alpha версия.
Даже пример сайта есть на Compose Multiplatform + Kotlin Wasm (по мне так очень корявый пока что). Кликни сюда, чтоб посмотреть.
Если ты не знаешь, что такое WebAssembly (wasm) - можешь прочитать в этой статье.
Напомню, что на прошедшей конференции Google IO команда Flutter тоже представила Flutter wasm (и пока в этой гонке находится впереди), на которую возлагает большие надежды.
В целом, данная технология должна сильно улучшить производительность Flutter Web и помочь сделать выбор в пользу Flutter тем, кто собирается писать web-приложения, а команда Kotlin хотят помешать и забрать себе этот кусок пирога! Ну а как мы знаем, конкуренция это хорошо, это заставит каждую из команд сделать свой продукт лучше!
Kotlin Help
Kotlin/Wasm | Kotlin
👍1
Настраивал FCM и как же меня выбесила политика Apple в плане отправки push-уведомлений🤬
Сделай разрешение такое, дай разрешение в Xcode, добавь сертификат в developer acc, получи ключ с разрешением на отправку push-уведомлений, дай разрешение на разрешение, покажи справку о несудимости и т.п. ЧТО ЭТО ТАКОЕ???
Будто я не пуши собираюсь кидать, а оружием торгую. Почему на Android это можно сделать за 5 минут, а Apple ведет себя как обиженный кондуктор?
Сделай разрешение такое, дай разрешение в Xcode, добавь сертификат в developer acc, получи ключ с разрешением на отправку push-уведомлений, дай разрешение на разрешение, покажи справку о несудимости и т.п. ЧТО ЭТО ТАКОЕ???
Будто я не пуши собираюсь кидать, а оружием торгую. Почему на Android это можно сделать за 5 минут, а Apple ведет себя как обиженный кондуктор?
❤2
Provider больше не нужон! Ладно, это плохой кликбейт.
Я написал что-то вроде урезанной версии Provider (без MultiProvider). А если точнее это класс, который наследуется от InheritedNotifier с generic, вместо конкретной вью-модели (прям как сделали большие дяди, написавшие пакет). Класс назвал мега эпично - AdvancedInherited, можно без аплодисментов, спасибо!
На картинке можешь посмотреть как этим пользоваться. Ничего необычного, если ты до этого хоть раз без Provider вручную с Inherited-штуками возился.
Сам InheritedAdvanced у меня в репозитории на гитхабе. Можешь открыть, посмотреть как реализовано и свистнуть его к себе в проект (и если надо поправить что-то под себя). Там же лежит пример с картинки.
Для чего я это сделал? Чтобы provider не таскать к себе в проект ради inherit'ов (хотя в этом ничего плохого нет).
В своих проектах я стараюсь уменьшить количество пакетов, только и всего🤷♂️
Я написал что-то вроде урезанной версии Provider (без MultiProvider). А если точнее это класс, который наследуется от InheritedNotifier с generic, вместо конкретной вью-модели (прям как сделали большие дяди, написавшие пакет). Класс назвал мега эпично - AdvancedInherited, можно без аплодисментов, спасибо!
На картинке можешь посмотреть как этим пользоваться. Ничего необычного, если ты до этого хоть раз без Provider вручную с Inherited-штуками возился.
Сам InheritedAdvanced у меня в репозитории на гитхабе. Можешь открыть, посмотреть как реализовано и свистнуть его к себе в проект (и если надо поправить что-то под себя). Там же лежит пример с картинки.
Для чего я это сделал? Чтобы provider не таскать к себе в проект ради inherit'ов (хотя в этом ничего плохого нет).
В своих проектах я стараюсь уменьшить количество пакетов, только и всего🤷♂️
❤1
Если кто не знал, на портале у Яндекс есть разного рода хэндбуки, в том числе хэндбук по Flutter. Кликай, чтобы посмотреть.
Правда он еще в разработке и не все главы готовы. А точнее готовы только 3 главы из 8 (1 глава - введение). Отличное решение для тех, кому надо что-то быстро вспомнить, а для новичков что-то узнать!
Правда он еще в разработке и не все главы готовы. А точнее готовы только 3 главы из 8 (1 глава - введение). Отличное решение для тех, кому надо что-то быстро вспомнить, а для новичков что-то узнать!
education.yandex.ru
Flutter — Хендбук от Яндекс Образования
Этот хендбук позволит вам разобраться в устройстве Flutter, особенностях его компонентов, языке Dart и паттернах проектирования современных приложений
🔥3
Мне стало интересно, на сколько большая разница в количестве вакансий на head hunter между Flutter и Android/IOS. В придачу ещё и React Native глянул.
Я, конечно, знал, что вакансий на native Android и IOS будет больше, но не думал, что на столько!
Колоссальное преимущество на стороне "родных". А React Native не настолько сильно уступает Flutter как оказалось.
Удивляет, что даже сегодня кроссплатформа так сильно уступает в популярности (именно в популярности, а не в качестве) native инструментам. Ведь сейчас каждая пиццерия хочет себе мобильное приложение, и дешевле такому бизнесу это будет сделать единожды на Flutter, чем 1 + 1 Android/IOS отдельно. (идите лесом с react native, ладно?)
Либо я сделал не совсем корректное сравнение. Если что исправьте. Я просто глянул на hhru.
P.S.: фильтрация выбрана по всей России.
Я, конечно, знал, что вакансий на native Android и IOS будет больше, но не думал, что на столько!
Колоссальное преимущество на стороне "родных". А React Native не настолько сильно уступает Flutter как оказалось.
Удивляет, что даже сегодня кроссплатформа так сильно уступает в популярности (именно в популярности, а не в качестве) native инструментам. Ведь сейчас каждая пиццерия хочет себе мобильное приложение, и дешевле такому бизнесу это будет сделать единожды на Flutter, чем 1 + 1 Android/IOS отдельно. (идите лесом с react native, ладно?)
Либо я сделал не совсем корректное сравнение. Если что исправьте. Я просто глянул на hhru.
P.S.: фильтрация выбрана по всей России.
❤3