От Нot reload для Web до макросов в IceBox: хроники Flutter-марта

4ff66d9217d189f8b821e975b6cc59f3.jpg

Привет, Хабр! На связи Friflex. Мы разрабатываем мобильные приложения и специализируемся на Flutter (работаем с фреймворком с первой версии).

Это первый выпуск нашего флаттер-дайджеста. Пока думаем делать его каждый месяц и рассказывать, что важного произошло в фреймворке и сообществе лично для нас.

Вот что нового во Flutter-вселенной случилось в марте.

1. Примеры использования макросов удалили из репозитория

Сама функция осталась, но ее переместили в IceBox. F макросы… Мы как разрабы не унываем. Думаем, что пока будут делать больший упор на оптимизацию build_runner и, возможно, когда-нибудь добавят макросы в другом виде. А может, приблизят язык к конкурентам с натива?  

Параллельно идет отделение функционала аугментаций (augmentations) в отдельную экспериментальную возможность со своим флагом.

2. Hot Reload для Flutter Web — теперь в бета-версии

До недавнего времени эта функция была недоступна для Web, и каждый запуск сбрасывал состояние и навигационный стек. Теперь в бета-канале Flutter появилась экспериментальная поддержка горячей перезагрузки для Web.

Ура-ура! В перспективе, когда понадобится мигрировать проект с мобильной версии или десктопа на Web, разработку можно будет ввести полностью опираясь на него и пользоваться всем удобством языка. Ультраполезная и глобальная вещь в развитии движка, которая (уверены) закрепит позиции фреймворка среди остальных конкурентов.

Как включить:

  1. Переключитесь на бета-канал:

48dd51e344343b4fb4d4b7017748e75c.png

2. Запустите приложение с флагом:

00841b27cfd5523e79147ef876a72b7a.png

3. Для VS Code можно добавить флаг в launch.json:

c45f66b25daa9ad05c8ce67e79676830.png

3. Обновления Flutter DevTools

Обновленный Performance View

Добавили более подробные временные диаграммы — теперь на них проще отслеживать заморозки UI, дорогостоящие операции и фреймы, которые выбиваются из 60 FPS.

Frame Analysis

Новый инструмент позволяет детально разбирать каждый кадр рендеринга: время компоновки, отрисовки, привязки к GPU и задержки платформы. Это особенно полезно при оптимизации сложных UI-элементов.

Memory View

Улучшили отображение и визуализацию используемой памяти. Добавили возможность отслеживать утечки объектов и аномальный рост heap. Крайне полезный апдейт! Еще бы сделали DevTools, которые помогали бы смотреть SQLite (если он есть в проекте) по таблицам на уровне Room в Android.

4. Пакеты video_player, google_maps_flutter, talker_flutter обновились

video_player — версия 2.9.3

Исправили ошибку с неправильной обработкой WebVTT-субтитров, особенно если в них используются многострочные блоки.

google_maps_flutter — версия 2.10.1

Ничего необычного, но приятно: обновили документацию API, добавили поддержку последних версий Flutter SDK.

talker_flutter — версия 4.6.12

Устранили конфликт с расширением firstWhereOrNull из пакета collection, которое могло ломать сборку, если использовались одинаковые импорты в разных частях приложения.

5. У пакетов на pub.dev появилась версия загрузочной аналитики

Теперь можно смотреть не просто количество загрузок, а по каким именно версиям пользователи скачивают пакет.

Что добавили:

  • Три режима отображения графика: наложение, без наложения и по процентам.

  • Группировка по мажорным, минорным и патч-версиям.

  • Всё это — во вкладке score на странице любого пакета.

Зачем это нужно? Разработчикам библиотек — чтобы понимать, какие версии реально используют, кто сидит на старых релизах и насколько успешно заходит новая версия.

Выглядит как шаг в сторону серьезной аналитики. Полезно, особенно если ты мейнтейнишь популярный пакет.

6. Кажется, команда Dart снова копается в конструкторах

В спецификации появился черновик новой фичи — Generic Constructors.

Вроде как только обсуждали Enhanced Constructors, а теперь еще один заход. 

Теперь можно будет задавать типовые параметры прямо в конструкторах, отдельно от класса. Это полезно, когда нужно выразить зависимость между аргументами конструктора, но не хочется тащить generic на весь тип.

Планируют два варианта:

  • Простой: избавляет от Object? и Function в ситуациях, где хочется типов.

  • Условный: позволяет писать конструкторы, доступные только при X extends Comparable и подобном.

Похоже, в команде Dart реально любят конструкторы. Счет уже сбился: обычный, фабричный, именованный, константный, расширенный, теперь еще и generic.

Но пока это только в черновиках — следим, куда заведет.

7. Плагин Flutter для VS Code обновился

  • Команда Dart: Go to Imports позволяет быстро перейти к нужной директиве import в файле.

  • Файл analysis_options.yaml (внутри lib/) не мешает автодополнению кода.

  • В отладочной консоли стек вызовов теперь содержит кликабельные ссылки на файлы SDK — это упрощает навигацию по исходникам.

Подробнее об изменениях — в официальном списке релиза.

7. Вышел Flutter 3.29.2, конечно же

  • Устранили сбои на Android-устройствах с API ниже 29 при использовании Impeller с OpenGLES. Теперь в документации четко указано, что Impeller для версии API ниже 29 может не поддерживать некоторый функционал, что приводит к ошибкам. Вместо него используется Skia https://github.com/flutter/flutter/pull/165090

  • Исправили сбой, возникавший при одновременной анимации и скроллинге на всех платформах. https://github.com/flutter/flutter/pull/164392

  • Улучшили производительность CanvasKit для Flutter Web https://github.com/flutter/flutter/pull/163175 и устранили проблему с двойной загрузкой canvaskit.wasm. https://github.com/flutter/flutter/pull/162198

  • Исправили проблему отсутствия глифов на Android и iOS. https://github.com/flutter/flutter/pull/165055

  • На iOS увеличили количество параллельных задач для декодирования изображений — это помогает избежать сбоев при потере доступа к GPU. https://github.com/flutter/flutter/pull/164036

Полный список изменений — здесь.

Как вам мартовские обновления?

Над выпуском работали: Роман Галиновский (Flutter Dev Friflex), Анна Ахлестова (Flutter Team Lead Friflex).

© Habrahabr.ru