Продолжаем обсуждать, что нового появилось в версии Flutter 3. Начало здесь.

При создании новой версии, разработчики обработали порядка 5 248 пул-реквестов! Обновления коснулись поддержки macOS и Linux, значительные улучшения производительности, обновления мобильной и веб-версии – и многое другое! Кроме того, была сокращена поддержка старых версий Windows. Теперь Flutter для Linux и macOS стабильно работает и включает ряд важных функций.

Каскадные меню и поддержка строки системного меню macOS

Теперь можно создавать строки меню в macOS с помощью виджета PlatformMenuBar, который поддерживает вставку меню и управляет тем, что отображается в меню приложений на macOS.

Полная поддержка ввода текста на разных языках на всех настольных платформах

Ввод текста на разных языках, в том числе использующих редакторы методов ввода текста (IME), например китайский, японский и корейский, полностью поддерживается на всех трех настольных платформах и это включает сторонние методы ввода, такие как Sogou и Google Japanese Input.

Специальные возможности на всех настольных платформах

Flutter для Windows, macOS и Linux поддерживает специальные возможности, такие как программы чтения с экрана, доступная навигация и инвертированные цвета.

Универсальные двоичные файлы по умолчанию в macOS

Начиная с Flutter 3, настольные приложения для macOS создаются в виде универсальных двоичных файлов со встроенной поддержкой как существующих компьютеров Mac на базе процессоров Intel, так и новейших устройств на базе Apple Silicon.

Сокращение поддержки Windows 7/8 в рекомендациях для разработки

В этом релизе повышается рекомендуемая для разработки версия Windows до Windows 10. Не смотря на то, что не прекращается поддержка более старых версий (Windows 7, Windows 8, Windows 8.1), для этих выпусков проводится ограниченное тестирование. Поэтому, лучше выполнить обновление.

Позитивные изменения также коснулись версии для мобильных устройств.

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

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

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

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

Flutter теперь поддерживает переменную частоту обновления на устройствах iOS с дисплеями ProMotion, включая iPhone 13 Pro и iPad Pro. На этих устройствах частота обновления приложений Flutter может достигать 120 Гц, в предыдущих версиях она ограничивалась 60 Гц. Это позволяет достичь более плавного воспроизведения быстрых анимаций, таких как прокрутка. Подробнее здесь.

Упрощенные релизы для iOS 

Добавлены  новые параметры в команду flutter build ipa, чтобы упростить выпуск приложений для iOS. Когда будете готовы к выпуску в TestFlight или App Store, запустите flutter build ipa, чтобы создать архив Xcode (файл .xcarchive) и комплект приложений (файл .ipa). После создания пакета приложения загрузите его в Apple через приложение Apple Transport для macOS или из командной строки с помощью xcrun altool (запустите man altool, чтобы получить инструкции по аутентификации ключа App Store Connect API). После загрузки ваше приложение будет доступно для выпуска в TestFlight или App Store. После настройки в Xcode исходных параметров, таких как отображаемое имя и значок приложения, заходить в Xcode еще раз для выпуска приложения не придется.

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

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

Завершение поддержки 32-разрядной версии iOS/iOS 9/iOS 10

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

Больше подробностей на странице RFC: End of support for 32-bit iOS devices.

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

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

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

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

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

• Заставка.

• Индикатор загрузки.

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

Поговорим об обновлениях инструментальных средств Flutter и Dart.

Обновление службы контроля качества кода

Выпущены версии 2.0 служб контроля качества кода для Flutter и Dart

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

Большинство недавно добавленных предупреждений контроля качества в 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, не используется. В тесте, построенном для измерения преимуществ этой оптимизации, время растеризации для этого случая улучшилось на порядок. В будущих релизах планируется применить эту оптимизацию к еще большему количеству сценариев.

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

Impeller

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

Impeller доступен на iOS. О разработке Impeller планируется рассказать подробнее в следующих материалах.

Встраиваемая реклама на Android

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

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

Material 3

Flutter 3 поддерживает Material Design 3, новое поколение Material Design. Flutter 3 предоставляет поддержку Material 3 по выбору; это включает в себя функции Material You, такие как динамический цвет, обновленная цветовая система и типографика, обновления многих компонентов и новые визуальные эффекты, представленные в Android 12, такие как новый дизайн сенсорной волны и эффект прокрутки при растяжении. Возможно попробовать функции Material 3 в новой кодовой лаборатории Take your Flutter app from Boring to Beautiful. Подробную информацию о том, как подписаться на эти новые функции и какие компоненты поддерживают Материал 3, см. в документации по API.

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

Flutter теперь позволяет добавлять все что угодно в библиотеки материалов ThemeData благодаря концепции расширения тем (Theme extensions). Вместо того, чтобы расширять (в Dart) ThemeData и заново реализовывать методы copyWith, lerp и другие, можно указать ThemeData.extensions.

Критические изменения

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

• Устаревший API удален после версии 2.10.

• Переходы между страницами заменены на ZoomPageTransitionsBuilder.

• Перенос useDeleteButtonTooltip в deleteButtonTooltipMessage.

Наша команда уже активно использует фичи новой версии в разработке платформы Своё Родное, а вы? Делитесь в комментариях.

Комментарии (0)