Что нового в Flutter 3

Что нового в Flutter 3

Вчера (11.05.2022) на Google I/O представили Flutter 3.0. Вот что вошло пресс-релиз разработчиков. Пришло время снова выпустить стабильный релиз Flutter — и мы невероятно гордимся тем, что анонсируем Flutter 3! Всего три месяца назад мы объявили о поддержке Flutter для Windows. Сегодня мы рады сообщить, что Flutter теперь стабилен для macOS и Linux, в дополнение к Windows!

У нас есть несколько интересных вещей, чтобы объявить в рамках этого выпуска, включая обновление поддержки Flutter для macOS и Linux, значительные улучшения производительности, мобильные и веб-обновления – и многое другое! Кроме того, у нас есть новости о сокращении поддержки старых версий Windows и короткий список изменений. Итак, приступим к делу!

Готов к производству на всех настольных платформах

Linux и macOS достигли стабильности и включают в себя следующие функции:

  • Каскадные меню и поддержка панели системного меню macOS
    • Теперь вы можете создавать отображаемые платформой строки меню на macOS с помощью PlatformMenuBar виджета, который поддерживает вставку меню только для платформы и контроль над тем, что появляется в меню приложений macOS.
  • Полная поддержка международного ввода текста на всех настольных платформах
    • Международный ввод текста, в том числе для языков, которые используют редакторы методов ввода текста (IMES), такие как китайский, японский и корейский, полностью поддерживается на всех трех настольных платформах, включая сторонние методы ввода, такие как Sogou и Google Japanese Input.
  • Доступность на всех настольных платформах
    • Flutter для Windows, macOS и Linux поддерживает специальные возможности, такие как программы чтения с экрана, доступная навигация и перевернутые цвета.
  • Универсальные двоичные файлы по умолчанию на macOS
    • Начиная с Flutter 3, настольные приложения Flutter macOS построены как универсальные двоичные файлы с встроенной поддержкой как существующих компьютеров Mac на базе Intel, так и новейших устройств Apple Silicon.
  • Устаревание Windows 7/8 для разработки
    • С этим выпуском мы повышаем рекомендуемую версию Windows для разработки до Windows 10. Хотя мы не блокируем разработку на более старых версиях (Windows 7, Windows 8, Windows 8.1), эти версии больше не поддерживаются Microsoft, и мы предоставляем ограниченное тестирование на этих выпусках. Хотя мы будем продолжать предлагать поддержку ‘best effort’ для старых версий, мы рекомендуем вам обновить.

⇲ Команда разработчиков Flutter продолжает поддержку приложений Flutter, работающих на Windows 7 и Windows 8; это изменение влияет только на рекомендуемую среду разработки.

Новый функционал во Flutter 3 (2022)
Новый функционал во Flutter 3 (2022)

Мобильные обновления

Наши обновления для мобильных платформ включают следующее:

Поддержка складных телефонов

Версия фреймворка Flutter 3 поддерживает складные мобильные устройства. В сотрудничестве, возглавляемом Microsoft, новые функции и виджеты позволяют создавать динамичные и восхитительные впечатления на складных устройствах.

В рамках этой работы MediaQuery теперь содержится список DisplayFeatures, описывающий границы и состояния элементов устройства, таких как петли, складки и вырезы. Кроме того, DisplayFeatureSubScreen виджет теперь позиционирует свой дочерний виджет, не перекрывая границы DisplayFeatures, и уже интегрирован с диалогами и всплывающими окнами по умолчанию фреймворка, что делает Flutter осведомленным и реагирующим на эти элементы из коробки.

Большое спасибо команде Microsoft, и особенно @andreidiaconu, за их вклад!

Попробуйте образцы эмулятора Surface Duo, в том числе со специальной вилкой галереи Flutter, чтобы увидеть двойные дисплеи Flutter в действии.

Поддержка переменной частоты обновления iOS

Flutter теперь поддерживает переменную частоту обновления на устройствах iOS с рекламными дисплеями, включая iPhone 13 Pro и iPad Pro. На этих устройствах приложения Flutter могут отображаться с частотой обновления 120 Гц, которая ранее была ограничена 60 Гц. Это приводит к более плавному опыту во время быстрой анимации, такой как прокрутка. Подробнее см. flutter.dev/go/variable-refresh-rate.

Упрощенные выпуски iOS

Мы добавили новые опции в команду flutter build ipa, чтобы упростить выпуск вашего приложения iOS. Когда вы будете готовы к распространению в TestFlight или App Store, запустите flutter build ipa создание архива Xcode (.xcarchive файл) и пакета приложений (.ipa файл). Вы можете дополнительно добавить —-export-method ad-hoc, —-export-method development, или —-export-method enterprise. Как только пакет приложений будет создан, загрузите его в Apple через приложение Apple Transport macOS или в командной строке с помощью xcrun altool(run man altool for App Store Connect API key authentication instructions). После загрузки ваше приложение будет доступно для выпуска в TestFlight или App Store. После настройки начальных настроек проекта Xcode Вам больше не нужно открывать Xcode, чтобы выпустить приложение.

Обновление версии Gradle

Если вы создадите новый проект с помощью инструмента Flutter, вы можете заметить, что сгенерированные файлы теперь используют последние версии плагинов Gradle и Android Gradle. Для существующих проектов вам необходимо вручную обновить версии до 7.4 для Gradle и 7.1.2 для плагина Android Gradle.

Sunsetting 32-bit iOS / iOS 9 / iOS 10

Как мы объявили в феврале 2022 года со стабильным выпуском 2.10, поддержка Flutter для 32-битных устройств iOS и версий iOS 9 и 10 подходит к концу. Это изменение затрагивает iPhone 4S, iPhone 5, iPhone 5C, а также устройства iPad 2-го, 3d и 4-го поколения. Flutter 3 – последняя стабильная версия, поддерживающая эти версии iOS и устройства.

Чтобы узнать больше об этом изменении, взгляните на RFC: конец поддержки 32-разрядных устройств iOS.

Веб-обновления

Наши обновления для веб-приложений включают следующее:

Декодирование изображений

Flutter web теперь автоматически обнаруживает и использует API ImageDecoder в браузерах, которые его поддерживают. На сегодняшний день большинство браузеров на базе Chromium (Chrome, Edge, Opera, Samsung Browser и другие) добавили этот API.

Новый API декодирует изображения асинхронно из основного потока, используя встроенные графические кодеки браузера. Это ускоряет декодирование изображений в 2 раза, и он никогда не блокирует основной поток, удаляя все jank, которые ранее были вызваны изображениями.

Жизненные циклы веб-приложений

Новый API жизненного цикла для веб-приложений Flutter дает вам гибкость для управления процессом начальной загрузки вашего приложения Flutter с хостинговой HTML-страницы и помогает Lighthouse анализировать производительность вашего приложения. Это относится ко многим вариантам использования, включая следующие часто запрашиваемые сценарии:

  • Заставка.
  • Индикатор загрузки.
  • Простая интерактивная целевая страница HTML, отображаемая перед приложением Flutter.

Для получения дополнительной информации ознакомьтесь с настройкой инициализации веб-приложения на docs.flutter.dev.

Обновления инструментов

Наши обновления для инструментов Flutter и Dart включают:

Обновленный пакет lint

Выпущена версия 2.0 пакетов lint:

Приложения, созданные в Flutter 3, flutter create автоматически включают наборы линтов v2.0. Существующим приложениям, пакетам и плагинам рекомендуется перейти на v2.0, чтобы следовать последним и лучшим практикам в мире Flutter, запустив flutter pub upgrade --major-versions flutter_lints.

Большинство недавно добавленных предупреждений lint в v2 поставляются с автоматическими исправлениями. Итак, после обновления до последней версии пакета в pubspec.yaml файле вашего приложения вы можете запустить dart fix —-apply свою кодовую базу, чтобы автоматически исправить большинство предупреждений lint (некоторые предупреждения все еще требуют некоторой ручной работы). Приложения, пакеты или плагины, которые еще не используютсяpackage:flutter_lints, могут мигрировать, следуя руководству по миграции.

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

Благодаря вкладчику с открытым исходным кодом knopp частичная перекраска была включена на устройствах Android, которые ее поддерживают. В нашем локальном тестировании это изменение сократило среднее, 90-е процентильное и 99-е процентильное время растеризации кадров в backdrop_filter_perfтесте на устройстве Pixel 4 XL в 5 раз. Частичная перекраска при наличии одной прямоугольной грязной области теперь включена как на iOS, так и на новых устройствах Android.

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

Благодаря работе участника с открытым исходным кодом JsouLiang потоки растра и пользовательского интерфейса движка теперь работают с более высоким приоритетом на Android и iOS, чем другие потоки; например, потоки фоновой сборки мусора Dart VM. В наших тестах это привело к ~ 20% более быстрому среднему времени сборки кадров.

До выпуска 3 политика допуска для растрового кэша рассматривала только количество операций рисования на изображении, предполагая, что любые с более чем несколькими операциями будут хорошими кандидатами на кэширование. К сожалению, это привело к тому, что движок потратил память на кэширование изображений, которые на самом деле были очень быстрыми для рендеринга. В этом выпуске представлен механизм, который оценивает сложность рендеринга изображений на основе стоимости операций рисования, которые он содержит. Использование этого в качестве политики приема растрового кэша уменьшило использование памяти без регресса производительности в наших тестах.

Благодаря вкладчику с открытым исходным кодом ColdPaleLight, который исправил ошибку в планировании кадров, из-за которой на iOS было сброшено небольшое количество анимационных кадров. Спасибо всем, кто сообщил об этой проблеме и предоставил репродукции и видео упавших кадров.

Impeller (Крыльчатка)

Команда усердно работает над решением для решения ранних jank на iOS и других платформах. В выпуске Flutter 3 вы можете просмотреть экспериментальный бэкэнд рендеринга под названием Impeller на iOS. Impeller предварительно компилирует меньший, более простой набор шейдеров во время сборки движка, чтобы они не компилировались во время работы приложения; это было основным источником jank во Flutter. Рабочее колесо не готово к производству и далеко не закончено. Еще не все функции Flutter реализованы, но мы достаточно довольны его точностью и производительностью в flutter / gallery приложение, которым мы делимся нашим прогрессом. В частности, худший кадр в анимации перехода приложения Gallery примерно в 20 раз быстрее.

Impeller доступна под флагом на iOS. Вы можете перейти —-enable-impellerк flutter run или установить FLTEnableImpeller флаг true в своем Info.plist файле, чтобы попробовать. Разработка Impeller продолжается на главном канале Flutter, и мы надеемся предоставить дальнейшие обновления в будущих выпусках.

Встроенные объявления на Android

Когда вы используете google_mobile_ads пакет, вы должны увидеть лучшую производительность в критических взаимодействиях с пользователем, таких как прокрутка и переходы между страницами. Это особенно заметно на устройствах, популярных на развивающихся рынках. Самое приятное, что никаких изменений кода не требуется!

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

Более интересные обновления

Другие обновления экосистемы Flutter включают следующее:

Material 3

Поддержка Flutter 3 Material Design 3, следующее поколение Material Design. Flutter 3 обеспечивает поддержку opt-in для Material 3; это включает в себя функции Material You, такие как динамический цвет, обновленная цветовая система и типография, обновления многих компонентов и новые визуальные эффекты, представленные в Android 12, такие как новый дизайн touch ripple и эффект растяжения overscroll. Попробуйте функции Material 3 в новое Возьмите свое приложение Flutter от скучного до красивого codelab. Смотрите API docs подробнее о том, как выбрать эти новые функции и какие компоненты поддерживают Material 3. Следить за текущей работой с Материал 3 Зонтичный выпуск.

Расширения темы

Flutter теперь позволяет добавлять что угодно в библиотеку материалов ThemeData, с концепцией под названием Расширения темы. Вместо расширения (в смысле дротика) ThemeData и повторная реализация его copyWithlerp, и другие методы, вы можете указать ThemeData.расширения. Кроме того, как разработчик пакетов, вы можете предоставить ThemeExtensions. См flutter.dev/go/theme-extensions для получения более подробной информации и проверки этот пример на GitHub.

Реклама

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

Для поддержки этих требований Google предлагает SDK User Messaging Platform (UMP), который заменяет предыдущий открытый исходный код Согласие SDK. В предстоящем выпуске GMA SDK для Flutter мы добавляем поддержку UMP SDK, чтобы издатели могли получить согласие пользователя. Для получения более подробной информации ознакомьтесь с страница google_mobile_ads на pub.dev.

Последние изменения

Поскольку мы продолжаем расти и улучшать Flutter, мы стремимся свести количество изменений к минимуму. С выпуском Flutter 3 у нас есть следующие прорывные изменения:

Если вы используете какой-либо из этих API, пожалуйста, обратитесь к руководство по миграции на Flutter.dev.

Для углубленного изучения кроссплатформенной разработки мобильных приложений под iOS и Android предлагаем дополнительно ознакомиться с нашими бесплатными курсами и уроками на русском языке по современным технологиям и языкам программирования: SwiftUIKit, SwiftUI, Kotlin, Kotlin Multiplatform (KMP), Dart, Flutter.

Похожие записи