[Перевод] Flutter 3.22 — Что нового во Flutter?

Добро пожаловать, еще один захватывающий стабильный выпуск Flutter! На этот раз мы рады представить Flutter 3.22. WebAssembly переходит в стабильную версию, полнофункциональную серверную часть Vulkan для Impeller на Android, обещая более плавную графику и значительное повышение производительности. Мы также представляем оптимизированные рабочие процессы с новыми свойствами состояния виджетов, динамическим размером представления и улучшенной проверкой формы. Но это еще не все — вы найдете объединение ресурсов на любой вкус, предварительную версию Vertex AI для Firebase в Dart и обновленные инструменты разработчика, которые сделают вашу жизнь проще.

Всего за несколько месяцев с момента нашего последнего обновления мы объединили впечатляющие 1595 запросов на включение от сообщества Flutter, причем 37 новых членов сообщества впервые внесли свой вклад во Flutter!

Итак, погрузитесь и откройте для себя все новые функции и улучшения, которые сообщество Flutter привнесло в этот последний выпуск!

WEB

С выпуском Flutter 3.22 Wasm теперь доступен в стабильной версии, предлагая значительные улучшения производительности. В наших внутренних тестах с использованием Chrome на MacBook M1 время рендеринга кадров приложения Wonderous улучшилось в среднем в 2 раза и в 3 раза в худших сценариях.

36e6c5ae79dec14197f155288cdd88f2.png

Эти улучшения важны для приложений с анимацией и переходами, где важно поддерживать плавную частоту кадров. Wasm помогает добиться этого, уменьшая узкие места в производительности, что приводит к более плавной анимации и переходам. Чтобы начать использовать Wasm с веб-приложениями Flutter, ознакомьтесь с нашей документацией Dart Wasm и документацией Flutter Wasm. Полный анонс можно найти в блоге Flutter at Google I/O .

Движок

Flutter 3.22 представляет значительные обновления Impeller, механизма рендеринга, который поддерживает ваши приложения Flutter. Ключевые моменты включают завершение разработки серверной части Vulkan для Android для более плавной графики и повышения производительности, постоянную оптимизацию эффектов размытия и сложного рендеринга путей, а также новый экспериментальный API для тестирования с помощью Impeller. В соответствии с нашей дорожной картой мы стремимся повысить качество и производительность Impeller, включая завершение миграции iOS на Impeller и расширение поддержки Android.

Impeller

Бэкэнд-функция Vulkan реализована на Android

В этом выпуске серверная часть Impeller Vulkan для Android является полнофункциональной. В частности, в последние несколько месяцев команда усердно работала, завершая реализацию быстрых расширенных блендов , поддержку пользовательских фрагментных шейдеров с помощью API FragmentProgram , поддержку PlatformView (правда, для этого требуется небольшая миграция API ), а также полностью реализуя все стили размытия .

Предварительный просмотр Impeller на Android

В стабильной версии 3.19, после улучшения серверной части OpenGL Impeller, мы предложили пользователям опробовать Impeller на устройствах Android как с поддержкой Vulkan, так и без нее. За последние несколько месяцев, после оценки производительности серверной части OpenGL и оставшейся работы над серверной частью Vulkan, мы решили сосредоточить наши усилия на подготовке рабочей серверной части Vulkan в первую очередь.

Impeller решает проблему сбоев при компиляции шейдеров. Кроме того, в наших тестах он превосходит устаревший рендер в среднем по времени кадра 90-го и 99-го процентиля. Поэтому мы считаем, что производительность серверной части Vulkan на Android приемлема. В этом выпуске (3.22) приложение, поддерживающее Impeller, будет использовать серверную часть Vulkan, если она доступна. В будущем выпуске это станет значением по умолчанию. Когда приложение, которое поддерживает Impeller, запускается на устройстве, не поддерживающем Vulkan, Flutter автоматически переключается на использование OpenGL ES со Skia. Никаких действий с вашей стороны не требуется. В будущем, когда мы считаем, что серверная часть OpenGL ES Impeller готова к производству, этот резервный вариант также будет использовать Impeller.

Поскольку предварительная версия Impeller на Android продолжает стабильный цикл 3.22, мы просим разработчиков Flutter выполнить обновление до последней стабильной версии и сообщать о любых проблемах, замеченных при включении Impeller. Обратная связь на этом этапе имеет неоценимое значение для обеспечения успеха Impeller на Android и для того, чтобы мы могли с уверенностью сделать его средством рендеринга по умолчанию в выпуске, выпущенном позднее в этом году. Аппаратная экосистема Android очень разнообразна. По этой причине наиболее полезный отзыв о Impeller должен включать подробную информацию о конкретном устройстве и версии Android, на которых возникли проблемы.

Улучшение производительности размытия

Blur был повторно реализован в Impeller для iOS и Android. В частности, новый подход, аналогичный подходу Skia, сокращает время размытия процессора и графического процессора почти вдвое в тестах .

На диаграмме ниже показаны наихудшие, 99%-ные, 90%-ные и средние времена растеризации кадра, а также время кадра графического процессора в мс на устройстве iPhone 11 в патологическом тесте, предназначенном для выявления производительности размытия. После переписывания размытия Impeller затраты процессора и графического процессора на размытие фильтра фона сократились почти вдвое. Этот масштаб улучшения распространяется и на непатологические случаи, как это происходит в типичных приложениях.

99%-ное, 90%-ное и среднее время растеризации кадра и время кадра графического процессора в мс на устройстве iPhone 11 в патологическом тесте, предназначенном для выявления производительности размытия

99%-ное, 90%-ное и среднее время растеризации кадра и время кадра графического процессора в мс на устройстве iPhone 11 в патологическом тесте, предназначенном для выявления производительности размытия

Трафарет, затем обложка (Stencil-then-Cover)

Impeller на iOS и Android перешёл на новую стратегию рендеринга,  основанную на подходе Stencil-then-Cover, описанном в главе «Рисование заполненных вогнутых многоугольников с использованием буфера трафарета» в OpenGL Redbook. Члены команды более подробно обсудили эту технику применительно к Flutter в выпуске GitHub № 123671 .

Этот подход решает проблему, когда растровый поток тратил слишком много времени на расчет тесселяций для сложных путей на ЦП, например, SVG и анимации Lottie. После изменения общее время кадра (поток пользовательского интерфейса на ЦП + поток растра на ЦП + работа графического процессора) значительно уменьшилось для кадров, содержащих сложные пути. Пользователи заметят, что анимация Lottie и другие сложные пути отображаются более плавно, с меньшей загрузкой ЦП и немного более высокой загрузкой графического процессора.

263845a96cc91e9c55cfb94587169c0e.png

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

Новый API

Хотя тест на флаттер все еще является экспериментальным, теперь он принимает флаг --enable-impeller , который проверяет Импеллер с помощью серверной части Vulkan.

Рамки

Свойства состояния виджета

MaterialStateбыл перемещен за пределы библиотеки материалов и переименован WidgetState, чтобы сделать его доступным для Купертино, базовой платформы Flutter и авторов пакетов. Дополнительную информацию о переходе на новый WidgetState см. в руководстве по миграции .

Динамический размер представления

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

Улучшенная проверка формы

Благодаря вкладу члена сообщества Flutter ШарбелОкзана , Flutter 3.22 поставляется с более гибкими методами проверки форм, позволяющими разработчикам создавать более надежную обработку пользовательского ввода, повышая как удобство использования, так и безопасность.

Ковариантность в 2D API

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

Условная упаковка ресурсов в зависимости от флейвора

Разработчики, использующие функцию вариантов,  теперь могут настраивать отдельные ресурсы для объединения только при создании для определенного варианта. Для получения дополнительной информации ознакомьтесь с разделом Условное объединение ресурсов на основе вкуса .

Преобразование ресурсов с использованием пакетов Dart

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

Андроид

Глубокие ссылки

Глубокие ссылки могут значительно улучшить взаимодействие с пользователем в вашем приложении Flutter, действуя как ярлыки, которые плавно направляют пользователей к определенному контенту в вашем приложении, повышая вовлеченность и продажи. Хотя Universal Links для iOS и App Links для Android настоятельно рекомендуются из-за их безопасности и удобства для пользователя, их настройка может быть немного сложной.

В последней стабильной версии Flutter мы представили инструмент проверки глубоких ссылок в DevTools, который поддерживает проверку веб-конфигурации для приложений Android. В этой версии мы добавили новый набор функций, помогающих проверять настройки в файлах манифеста Android.

Дополнительную информацию об использовании этого инструмента см. в разделе Проверка глубоких ссылок .

Жест назад

Flutter теперь добавляет дополнительную поддержку предстоящей функции прогнозируемого возврата Android, благодаря которой пользователи могут просмотреть предыдущий маршрут или даже предыдущее приложение во время жеста назад. На устройствах Android эта функция все еще находится с пометкой, но вы можете найти подробную информацию о том, как опробовать ее самостоятельно,  на GitHub .

6358e28b1339ac13ba8be16a8f6dbe4a.gif2eeefef0512fa5c85a085332e283173f.gif

Инструмент Flutter обеспечивает соблюдение требований к версии для Gradle, AGP, Java и Kotlin.

В этом выпуске инструмент Flutter применяет политику в отношении поддерживаемых им версий для Gradle, плагина Android Gradle (AGP), Java и Kotlin. Первоначально инструмент выдает только предупреждения.

В настоящее время поддерживаются следующие диапазоны версий:

  • Gradle — полностью поддерживается с версии 7.0.2 до текущей, в противном случае предупреждайте.

  • AGP — полностью поддерживается начиная с версии 7.0.0, в противном случае предупреждайте.

  • Java — полная поддержка текущей версии Java 11, в противном случае предупреждайте.

  • Kotlin — полностью поддерживается начиная с версии 1.5.0, в противном случае предупреждайте.

В следующем основном выпуске эти предупреждения станут ошибками, которые можно будет переопределить с помощью флага --android-skip-build-dependency-validation. В более общем смысле, инструмент выдает предупреждение по крайней мере для одного выпуска перед полным прекращением поддержки (генерацией ошибки) для данной версии этих зависимостей.

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

Поддержка использования Gradle Kotlin DSL в сценариях сборки Gradle на Android.

Gradle Kotlin DSL теперь поддерживается во Flutter, предоставляя альтернативу традиционному Gradle Groovy DSL. Эта поддержка упрощает редактирование кода благодаря автозаполнению, быстрому доступу к документации, навигации по исходному коду и контекстно-зависимому рефакторингу.

Эта первоначальная поддержка была предоставлена ​​пользователем GitHub bartekpacia. Теперь разработчики могут переписать свои сценарии сборки Gradle на Kotlin, чтобы воспользоваться этими преимуществами, хотя инструмент Flutter пока не позволяет выбирать Kotlin вместо Groovy при использовании flutter create.

Для получения более подробной информации ознакомьтесь с PR 140744 от bartekpacia .

Улучшения представлений платформы

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

Из-за ошибки в Android 14 приложения, созданные с использованием более старых версий Flutter, могут работать некорректно на устройствах под управлением этой новой версии Android.

Flutter 3.22 устраняет эту проблему и повышает общую производительность этих собственных компонентов в ваших приложениях для Android. Итак, чтобы обеспечить бесперебойную работу вашего приложения на всех устройствах Android, обязательно пересоберите и выпустите свое приложение с помощью Flutter 3.22.

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

Прекращение поддержки KitKat

Минимальная поддерживаемая версия Android Flutter теперь — Lollipop (API 21). Начиная со стабильной версии Flutter 3.22, Flutter больше не будет работать на устройствах под управлением Android KitKat (API 19). Более подробную информацию можно найти в нашем руководстве по прекращению поддержки .

iOS

Представление о производительности платформы

Мы понимаем, что производительность просмотра на платформе iOS была болью для многих разработчиков Flutter. Это было особенно заметно в представлениях прокрутки при использовании представлений платформы.

Недавние обновления напрямую решают эти проблемы, обеспечивая значительные улучшения в таких сценариях, как встраивание нескольких встроенных рекламных объявлений в статью. Вот некоторые ключевые улучшения в нашем тесте :

  • Снижение использования графического процессора:  использование графического процессора было снижено на 50%, что привело к меньшему энергопотреблению и потенциально более плавному пользовательскому интерфейсу.

  • Улучшенный рендеринг кадров:  среднее время рендеринга кадров сократилось на 1,66 мс (33%).

  • Минимизация зависаний:  время рендеринга кадров в худшем случае сократилось на 3,8 мс (21%).

Если вы ранее сталкивались с проблемами производительности при использовании нескольких представлений платформы (например, рекламы, карт и т. д.) в представлениях с прокруткой, эти оптимизации могут обеспечить более плавную и отзывчивую прокрутку. Пожалуйста, попробуйте и дайте нам знать, что вы думаете.

62893a3c4d539820e024331ce616353d.png28788206344835282f8363fd61df9108.png

Экосистема

Предварительная версия Vertex AI для Firebase Dart SDK

Продукт Vertex AI для Firebase выпущен для общедоступной предварительной версии и включает в себя Dart SDK. Это позволяет вам использовать Gemini API для создания генеративных функций искусственного интеллекта для вашего приложения Dart или Flutter с учетом производительности и масштаба разработки. SDK интегрирован с Firebase App Check , которая защищает ваши вызовы API и защищает вашу серверную инфраструктуру от серьезных угроз, таких как мошенничество с выставлением счетов, фишинга и т. д. Ознакомьтесь с руководством по началу работы с Dart и начните использовать его бесплатно с помощью промокода.

2b6548850b6ce1533d435bd3c3afdc22.png

Google AI Dart SDK остается доступным и рекомендуется только для прототипирования. Google AI имеет бесплатный доступ (в пределах ограничений и там, где это возможно) и оплату по мере использования. Если вы создавали прототип с помощью Google AI Dart SDK и готовы перейти на Vertex AI для Firebase, ознакомьтесь с руководством по миграции .

Обновления инструментов разработчика

Мы продолжаем совершенствовать DevTools — набор инструментов для повышения производительности и отладки для Dart и Flutter. Этот выпуск включает улучшения производительности, общую доработку и новые функции, такие как включение образцов ЦП на временную шкалу, расширенную фильтрацию и поддержку импорта и экспорта снимков памяти.

Другие заметные улучшения были включены в пакеты devtools_extensionsи devtools_app_shared, поддерживающие авторов расширений DevTools. Мы добавили поддержку подключения расширения к новому Dart Tooling Daemon (DTD), который позволяет расширениям DevTools получать доступ к общедоступным методам, зарегистрированным другими клиентами DTD, такими как IDE, а также предоставляет доступ к минимальному API файловой системы для взаимодействия с проект развития.

Чтобы узнать больше обо всех обновлениях, включенных в Flutter 3.22, ознакомьтесь с примечаниями к выпуску DevTools 2.32.0 ,  2.33.0 и 2.34.1 .

Google Mobile Ads SDK для Flutter

Для тех из вас, кто монетизирует свои приложения Flutter с помощью рекламы, у нас есть несколько интересных новостей: Google Mobile Ads для Flutter только что выпустил крупное обновление до версии 5.0.1!

Расширенная поддержка SDK платформы обмена сообщениями пользователей (UMP). Обновление добавляет поддержку новейших API из Android UMP SDK версии 2.2.0 и iOS UMP SDK версии 2.4.0. UMP SDK имеет решающее значение для соблюдения правил конфиденциальности, упрощая получение согласия пользователя на персонализированную рекламу. В этой новой версии представлено несколько новых API, упрощающих процесс сбора согласия.

Расширенные партнеры-посредники. Мы расширили ваши горизонты монетизации рекламы, предложив интеграцию с популярными рекламными партнерами, включая Unity ,  Meta ,  AppLovin ,  Iron Source ,  Mintegral ,  Pangle ,  DT Exchange ,  InMobi и Liftoff. Теперь вы можете максимизировать доход от своего приложения благодаря расширенным возможностям посредничества и упрощенной реализации.

Мы рекомендуем вам опробовать эти новые функции в ваших приложениях Flutter и сообщить нам, поддержку каких еще партнеров-посредников вы хотели бы видеть у нас. Ваши отзывы бесценны, поскольку мы продолжаем совершенствовать Google Mobile Ads SDK для Flutter.

Критические изменения и прекращение поддержки

ColorScheme.fromSeed

Если seedColorиспользуемый цвет ColorScheme.fromSeedимеет высокое значение цветности, в результате ColorSchemeмогут получиться пастельные палитры, которым не хватает яркости. Чтобы выходные цвета точно соответствовали предполагаемому ощущению исходного цвета, рассмотрите возможность dynamicSchemeVariantустановки DynamicSchemeVariant.fidelityили DynamicSchemeVariant.content. Эти параметры создают палитры, которые более точно соответствуют исходному исходному цвету.

Удаление встраивания Android v1

Удаление первой версии встроенного Android находится в процессе. Скорее всего, это не повлияет на большинство приложений, поскольку

  1. Вторая версия использовалась по умолчанию в течение многих лет.

  2. Инструмент Flutter уже блокировал создание приложений первой версии, если только он не был специально переопределен с помощью флага -- ignore-deprecation.

В этом выпуске полностью прекращается поддержка инструментов Flutter для приложений v1. Переопределить уже невозможно.

Авторы плагинов, обратите внимание : когда встраивание Android v1 изначально было признано устаревшим, для авторов плагинов был написан документ по миграции по адресу https://docs.flutter.dev/release/breaking-changes/plugin-api-migration. В рамках этой миграции авторам плагинов было рекомендовано сохранить поддержку приложений, использующих встраивание версии 1, включив в их *Plugin.javaметод a с сигнатурой

public static void registerWith(@NonNull io.flutter.plugin.common.PluginRegistry.Registrar registrar)

Мы планируем полностью удалить встраивание Android v1 в следующем выпуске,  после чего плагины, включающие метод с этой сигнатурой, больше не будут компилироваться (поскольку он ссылается на тип из встраивания Android v1).

В настоящее время это бесполезно, поскольку в этом выпуске приложения, использующие встраивание v1, не работают. Мы рекомендуем авторам плагинов как можно скорее выпускать обновленные версии своих плагинов с удаленным кодом v1, чтобы избежать сбоев в будущих версиях Flutter. В качестве примера ознакомьтесь с PR 6494 , который удалил плагины, поддерживаемые командой Flutter.

Устаревшие версии удалены в версии 3.22.

Критические изменения в этом выпуске включают устаревшие API, срок действия которых истек после выпуска версии 3.19. Чтобы просмотреть все затронутые API, а также дополнительные инструкции по контексту и миграции, см. руководство по прекращению поддержки для этого выпуска. Многие из них поддерживаются Flutter fix , включая быстрые исправления в IDE. Массовые исправления можно оценить и применить с помощью dart fixинструмента командной строки.

Как всегда, большое спасибо сообществу за участие в тестах — они помогают нам выявить критические изменения. Чтобы узнать больше, ознакомьтесь с политикой критических изменений Flutter .

Заключение

В основе успеха Flutter находитесь вы — наше удивительное сообщество. Этот релиз был бы невозможен без вашего бесчисленного вклада и непоколебимой страсти. От всего сердца благодарим вас.

Готовы изучить Flutter 3.22? Изучите полные примечания к выпуску и журнал изменений, запустите терминал и запустите flutter upgrade. Нам не терпится увидеть, что вы создадите!

Habrahabr.ru прочитано 8067 раз