Google I/O и новые фичи
Май богат на события: Flutter получил важное обновление, а на конференции Google I/O было представлено много крутых докладов. Ещё мы внимательно посмотрели на облачные сервисы Google и заглянули на Reddit, где развернулась дискуссия про болевые точки Flutter.
Что нового в Flutter 3.10
Flutter-разработчики по всему миру возлагали большие надежды на новый релиз, ждали исправления множества проблем. Забегая вперёд, их ожидания оправдались. Релиз 3.10 содержит изменения, которые формируют образ будущего развития Flutter.
Библиотека Material обновилась до версии M3 и теперь не имеет расхождений со спецификацией Material Design. Компоненты, их темы и визуальные эффекты — всё это заработает, если подтвердить переключение, используя временное свойство useMaterial3 класса ThemeData. В будущем стабильном релизе M3 будет включена по умолчанию.
Экосистема Apple всегда была трудной для освоения сторонними разработчиками, и Flutter не исключение. Нативные приложения в ней работают плавно и стабильно, что ставит определённую планку качества перед любыми кроссплатформенными решениями. Чтобы Flutter стал шустрее и отзывчивее, ему заменили старый движок Skia на альтернативный Impeller. Превью этого движка дебютировало в версии 3.7 и настолько зашло разработчикам, что в 3.10 он стал основным.
Impeller радикально улучшает производительность и сокращает потребление памяти почти на 50 процентов. Достигается это за счёт меньшего количества проходов и промежуточных этапов рендеринга. Сжатие текстур с потерями сильно снижает нужный объём памяти без заметного ухудшения качества картинки.
Той же цели послужили изменения, внесённые одним из участников Open Source сообщества. Тот обнаружил, что при выставлении цвета фона FlutterViews в ненулевое значение, частота кадров существенно увеличивается. Для некоторых случаев это повышает её втрое, что отлично заметно на 120-герцовых дисплеях устройств Apple.
Ещё одно важное изменение было внесено в процесс запуска приложений. Неэффективный алгоритм поиска идентификаторов влиял на скорость запуска. Чем больше был размер приложения, тем больше времени уходило на старт. Теперь поиск идентификаторов исправлен, что в свою очередь дало ускорение запуска на 30-50 процентов даже в больших приложениях.
Приятным бонусом релиза стала полноценная поддержка беспроводной отладки на iOS-устройствах. Теперь можно подцепить устройство в Xcode по беспроводной связи и развернуть любое приложение на нём командой flutter run. Поддерживается hot reload, так что про кабель забудьте.
Авторы приложений под Android тоже получили приятные ништяки. Появилась поддержка библиотеки Camera X. Предварительная версия была включена в плагине Flutter Camera. Чтобы задействовать её в проекте, нужно добавить строку в pubspec.yaml:
Dependencies:
camera: ^0.10.4 # Latest camera version
camera_android_camerax: ^0.5.0
Команда разработки Flutter прилагает все усилия, чтобы сделать его драйвером глобальных изменений в индустрии. Они хотят вывести создание кроссплатформенных приложений на новый уровень, так что нас ждёт интересное будущее. А пока можно почитать оригинальный пост в блоге разработчиков на английском языке и опубликованный перевод на VC.
Боли Flutter-разработчика
Недавно мы увидели отличную дискуссию на Reddit, где обсуждались существующие проблемы, ухудшающие жизнь Flutter-разработчикам. Взглянем пристальнее, на что они жалуются больше всего.
Если хорошему строителю дать плохие инструменты, то и результат, вне зависимости от квалификации строителя, будет так себе. Производительность инструментов и другие аспекты языка Dart прямо влияют и на Flutter-разработчиков. Некоторые из них отмечают низкую скорость анализатора кода, что создаёт неприятные задержки в 2-3 секунды. В это время часть кода становится серой и недоступна для изменения. Ещё разработчики жалуются на медленный процесс сборки приложений.
Интеграционное тестирование штатными инструментами также оставляет желать лучшего. Этот факт заставил некоторые компании, такие как Patrol, начать разработку собственных решений. Их одноимённая библиотека приятнее в использовании, несмотря на множество шероховатостей. Она публикуется с открытым исходным кодом под лицензией Apache 2.0 и подходит для тестирования реальных сценариев использования.
Кодогенерация заслуживает отдельного внимания. Она медленная… очень медленная. Даже рутинная операция парсинга JSON работает, мягко говоря, не идеально. Если посмотреть на содержимое pub.dev, становится ясно, что огромное количество пакетов только и делают, что занимаются кодогенерацией. Dart и метапрограммирование пока не слишком совместимы. А писать свои собственные кодогенераторы сложно по двум причинам: нет документации и мало примеров.
На деле раздражающих моментов в Dart и Flutter гораздо больше. Казалось бы, Google — гигантский конгломерат с бесконечными ресурсами, а проблем много. Приходится надеяться лишь на то, что экосистема инструментов вырастет, а кодогенерация будет упрощена и уменьшена за счёт изменений в языке. Случится это или нет — время покажет.
Ставка на облака
Google продолжает активно продвигать два своих облачных сервиса: Cloud Run и Firebase. Первый позволяет запускать код внутри облачной инфраструктуры Google. Второй — облачный набор утилит для разработчиков, включающий в себя NoSQL базу данных. Вместе они позволяют решать сразу кучу проблем, связанных с:
- запуском приложения;
- хранением данных;
- привязке доменов;
- обеспечением отказоустойчивости,
- масштабированием.
Cloud Run манипулирует контейнерами. Ему, по большому счёту, не важно, на каком языке написано приложение. Это может быть Go, Python, Ruby, Dart, PHP или Node.js. Firebase же создан больше для JavaScript, но это не мешает ему поддерживать другие языки, такие как Python или C++. Для Flutter была создана целая пачка плагинов, позволяющих нативно работать с Firebase, что делает интеграцию гораздо проще.
NoSQL база данных Firebase делает упор на простоту и скорость. Данные хранятся в виде JSON-объектов, что отлично подходит для мобильных приложений. Облачная служба Firebase Remote Config позволяет менять поведение и внешний вид приложений на лету, не требуя обновления самого приложения. Так можно легко проводить A/B-тестирование и сразу получать результаты в удобном виде прямо в панели управления сервисом.
Ещё часто бывает, что на разработку MVP даётся совсем мало времени и решать традиционные задачи с доменами просто нет времени. Тут облачная служба также помогает, выдавая готовый тестовый домен сразу, без дополнительных телодвижений. Ну а что касается отказоустойчивости и масштабирования, тут всё просто. SLA инфраструктуры Google — магические пять девяток, то есть 99.999%. О проблемах с масштабированием можно забыть.
Разумеется, многие наши читатели могут сказать, что это vendor lock-in и будут правы. Но есть и важный нюанс: современный бизнес требует мгновенных решений и реализаций идей. Здесь же есть всё, что нужно для быстрого старта любого приложения и с оплатой «в одном окне». Так что часто выбор делается именно по этому принципу.
Google I/O 2023
10 мая состоялось масштабное событие — ежегодная конференция разработчиков Google I/O. Традиционно после мероприятия на Youtube стало доступно множество полезных видео, среди которых мы выбрали, как нам кажется, лучшие.
В продолжение темы облачных сервисов Google — классное видео с примером работы веб-приложения, использующего Cloud Run и платформу Firebase:
Deep links — важная часть улучшения пользовательского опыта. Следующее видео кратко рассказывает, какие преимущества можно извлечь из использования этой фичи:
Раньше Flutter поддерживал интеграцию с библиотеками Android только через подход на основе сообщений (platform channels). Но теперь есть новая команда, использующая JNI для подключения к системным API Android. Теперь можно получить доступ к API платформы без platform channels или отдельного плагина:
Полный список опубликованных видео есть на сайте конференции, а если захочется немного отдохнуть и расслабиться, советуем сыграть в Hearthstone-like игру, где колоду вам сгенерирует AI — I/O Flip.
Митапы
Flutter Meetup
21 июня 2023
Летом у нас запланирован Flutter Meetup. Программа мероприятия формируется, но регистрация уже открыта. Кстати, вы уже можете подать доклад прямо в режиме онлайн. Заявки на участие спикера принимаются до 1 июня.
Интересуетесь нашими мероприятиями? В Telegram-канале Evrone meetups мы выкладываем анонсы с подробными описаниями докладов, а также студийные записи прошедших митапов. Тем для кого выступать в новинку, мы оказываем всяческую поддержку и помогаем оформить экспертизу в яркое выступление. Подписывайтесь и пишите @andrew_aquariuss, чтобы узнать подробности.
Вакансии
Evrone
Мы открыты для новых Flutter-разработчиков. В Evrone можно работать удалённо с первого дня, мы поддерживаем и оплачиваем участие в Open-source проектах, а расти в грейдах можно с помощью честной системы проверки навыков и менторства.