Предварительный просмотр Flutter GPU для продвинутой графики и 3D, поддержка Multi-View Embedding в веб-приложениях, монетизация видеорекламы.

Команда Flutter-разработчиков Friflex делится переводом официального релиза новой версии фреймворка.

Flutter

Новые слайверы (slivers)

Добавили слайверы, которые можно скомпоновать вместе для динамического поведения панели приложений:

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

Новые слайверы похожи на прежние, SliverPersistentHeader и SliverAppBar, но у них более простые API. 

У новых слайверов новый образец кода. В документации API PinnedHeaderSliver есть пример, который воссоздает эффекты, как в панели приложений «Настройки iOS».

Обновление Cupertino library

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

Добавили новые свойства для работы с фокусом для CupertinoButton (focusNode, focusColor, onFocusChange, autofocus). Также теперь можно настроить цвет отключенного CupertinoTextField.

TreeView

У пакета two_dimensional_scrollables появился виджет TreeView вместе с несколькими вспомогательными классами, которые позволяют создавать высокопроизводительные скользящие деревья (performant scrolling trees). Они по мере роста могут прокручиваться во всех направлениях. В обновлении есть несколько примеров, как использовать виджеты TableView и TreeView.

Добавили TreeSliver, чтобы строить деревья в одномерной прокрутке. API TreeView и TreeSliver совпадают. Переключаться между ними стало проще. Можно выбрать виджет, который подходит для вашего сценария использования.

CarouselView

В обновлении появился CarouselView — виджет для Material Design carousel. Он представляет собой Бесконечный список элементов: список элементов, который можно прокрутить до края контейнера. Крайние элементы могут динамически менять размер при прокрутке.

Другие возможности виджетов

Перенесли из Material library в Widgets library следующие виджеты:

  • Виджет Feedback — обеспечивает легкий доступ к тактильной и звуковой обратной связи от устройства в ответ на жесты, например, нажатие.

Расширенные возможности для AnimationStatus

Благодаря фантастическому вкладу @nate-thegrate, были добавлены расширенные возможности для AnimationStatus:

  • isDismissed;

  • isCompleted;

  • isRunning;

  • isForwardOrCompleted.

Некоторые из этих получателей уже существуют в подклассах анимации, например, AnimationController и CurvedAnimation. Теперь getters доступны в подклассах анимации в дополнение к AnimationStatus. В AnimationController добавили метод toggle, чтобы можно было переключать направления анимации.

Обновления в SelectionArea

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

Тройной клик

  • Тройной щелчок + перетаскивание: расширяет выделение в блоках абзаца.

  • Тройной щелчок: выбирает блок абзаца в позиции касания.

Двойное касание

  • Двойное касание + перетаскивание: расширяет выделение в блоках слов. Поддерживается на нативных Android/Fuchsia/iOS и iOS web.

  • Двойное касание: выбирает слово в позиции касания. Поддерживается на нативных Android/Fuchsia/iOS и Android/Fuchsia web.

Engine

Повышение производительности и точности

Мы все еще ждем, когда в стабильной версии удалят опцию «Отказаться от использования Impeller на iOS». А пока команда усердно работала над улучшением производительности и точности Impeller. Например, в рендеринге текста выросла производительность прокрутки эмодзи. Для этого при прокрутке большой коллекции эмодзи устранили задержки, что стало отличным стресс-тестом возможностей рендеринга текста Impeller.

Команда улучшила точность рендеринга текста Impeller. В частности, вес текста, интервал и кернинг теперь полностью соответствуют качеству текста, который отображается с помощью устаревшего рендерера.

До
До
ПослДо
После
После
До
После
После

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

Предварительный просмотр Impeller на Android был продлен из-за ошибки в Android 14. Она влияет на API, которые Impeller использует для Platform Views. Ошибку исправила команда Android, но в ближайшем будущем многие развернутые устройства будут работать с непропатченной версией Android. Чтобы решить эту проблему, нужна дополнительная миграция API и, следовательно, дополнительный стабильный цикл выпуска. Чтобы Flutter-приложения работали на максимально широком спектре устройств, решили отложить переход Impeller в статус рендерера по умолчанию. Он появился в стабильном релизе позже в этом году.

Улучшенные значения по умолчанию для изображений с пониженным разрешением

Значение FilterQuality по умолчанию изменено с FilterQuality.low на FilterQuality.medium для изображений. Когда они значительно больше своего целевого прямоугольника, что считается нормальным, FilterQuality.low делает их более пиксельными и замедляет отрисовку. У FilterQuality.medium таких проблем нет. В дальнейшем команда рассмотрит подходящие названия для разных уровней FilterQuality.

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

Появилось крупное обновление для возможностей рендеринга с помощью Flutter GPU, который доступен на главном канале. Этот низкоуровневый графический API позволяет создавать пользовательские рендереры при помощи кода Dart и шейдеров GLSL. Нативный код платформы для этого не нужен.

Flutter GPU расширяет возможности рендеринга и обеспечивает улучшенную графику и 3D-сцены. Для этого нужен рендеринг Impeller, который в настоящее время поддерживается на iOS, macOS и Android. В раннем предварительном просмотре Flutter GPU нацелен на поддержку всех платформ Flutter. 

API предоставляет полный контроль над привязками рендер-пасса, вершинным этапом и загрузкой данных на GPU. Такая гибкость нужна для создания сложных рендеринговых решений: от 2D-анимаций персонажей до комплексных 3D-сцен.

Чтобы начать работать с Flutter GPU, нужно переключиться на main channel и добавить пакет flutter_gpu в свои проекты.

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

Чтобы глубже погрузиться в Flutter GPU и узнать, как можно его использовать, читайте блог Flutter GPU.  

Веб

Многовидовое встраивание (Multi-view embedding)

Веб-приложения на Flutter теперь могут использовать многовидовое встраивание, чтобы одновременно отображать контент в нескольких HTML-элементах. Функция предлагает гибкость для интеграции представлений Flutter в веб-приложения.

В режиме многовидового отображения веб-приложение на Flutter не отображается сразу после запуска. Вместо этого оно ожидает, пока хост-приложение добавит первое View с помощью метода addView. Хост-приложение может динамически добавлять или удалять эти виды, а Flutter, соответственно, настраивает свои виджеты.

Чтобы включить режим многовидового отображения, установите multiViewEnabled: true в методе initializeEngine в файле flutter_bootstrap.js. Видами можно управлять из JavaScript, добавляя их в HTML-элементы и удаляя по мере необходимости. Flutter обновляется после каждого действия с видом, что позволяет динамически отображать контент.

Функция полезна для интеграции Flutter в сложные веб-приложения, где требуется несколько независимых представлений Flutter. Она также поддерживает пользовательские данные инициализации для каждого представления. Разработчики могут настраивать персонализированные конфигурации и интерактивные взаимодействия.

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

Монетизация

Поддержка монетизации видеорекламы 

Новый плагин Interactive Media Ads (IMA) поддерживает монетизацию видеорекламы в мобильных приложениях на Flutter. IMA дополняет плагин Google Mobile Ads (GMA), который в основном поддерживает форматы дисплейной рекламы.

Встраиваемую видеорекламу обычно показывают в видеоплеере до (преролл), во время (мидролл) или после (постролл) воспроизведения контента. Некоторую встраиваемую видеорекламу пользователь может пропускать.

Преимущества Flutter IMA

  • Бесшовная монетизация видеоконтента в приложениях на Flutter. Например, можно показать пользователю 15-секундную рекламу перед началом ролика.

  • Преимущества нативного SDK IMA. У разработчика будет доступ к премиум-рекламе Google. Плагин соответствует отраслевым стандартам, таким как IAB VAST.

Начальная версия в настоящее время поддерживает преролл-формат на платформах Android и iOS. Скоро будет доступна поддержка мидролл-формата. Если возникнут проблемы при работе плагина IMA, пишите сюда.

Ресурсы: Plugin guide, Sample App, Git Repository.

iOS

Начальная поддержка Swift Package Manager

Flutter использует CocoaPods, чтобы управлять зависимостями нативных приложений на iOS и macOS.

Во Flutter 3.24 появилась начальная поддержка Swift Package Manager, которая предлагает несколько преимуществ:

1. Плагины Flutter смогут использовать экосистему пакетов Swift.

2. Простая установка Flutter. Swift Package Manager входит в состав Xcode. В будущем не нужно будет устанавливать Ruby и CocoaPods, чтобы использовать Flutter для платформы Apple.

Вы можете попробовать добавить поддержку Swift Package Manager в свои плагины и поделиться отзывами здесь.

Экосистема

Обновления плагина Shared Preferences

Добавили два новых API в плагин shared_preferences: SharedPreferencesAsync и SharedPreferencesWithCache. Важное изменение — реализация для Android использует Preferences DataStore вместо Shared Preferences.

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

SharedPreferencesWithCache построен на основе SharedPreferencesAsync. Он позволяет пользователям синхронно получать доступ к локально кэшированной копии настроек. SharedPreferencesWithCache похож на старый API, но теперь его можно создавать несколько раз с разными параметрами.

Новые API предназначены для замены текущего API SharedPreferences в будущем. SharedPreferences — один из самых используемых плагинов в экосистеме. Поэтому потребуется время, чтобы перейти на новые API.

Инструменты DevTools и IDE

Если вы когда-либо задумывались, строит ли ваше Flutter-приложение больше виджетов, чем ожидалось, новая функция в DevTools Performance ответит на этот вопрос. С помощью Rebuild Stats можно узнать, сколько раз виджет был построен в приложении или даже в какой кадр Flutter.

Исправили критические ошибки в Network profiler и Flutter Deep Links tool и внесли общие улучшения. Теперь можно использовать все инструменты DevTools прямо внутри IDE.

Улучшили боковую панель Flutter в VS Code, чтобы сделать доступ к нужным инструментам проще. Обновите до последних версий VS Code и расширений Flutter и Dart.

Появились обновления в DevTools Extensions. Теперь вы можете использовать расширения DevTools, когда отлаживаете тесты Dart или Flutter или просто пишете код в IDE. Если вы хотели использовать инструмент (или создать его!) для одной из этих пользовательских задач, теперь это возможно.

Чтобы узнать больше обо всех обновлениях во Flutter 3.24, ознакомьтесь с примечаниями к релизу DevTools 2.35.0, 2.36.0 и 2.37.2.

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

Появились критические изменения в API страниц Navigator, обобщенных типах в PopScope, рендере по умолчанию для Flutter web. Полный список рекомендаций по миграции можно найти на странице с критическими изменениями.

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

 

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


  1. lil_master
    08.08.2024 11:13
    +2

    С каждым днём Flutter становится удобнее и функциональнее, особенно обрадовала потенциальная свобода от cocoapods, не знаю как вам, ребята, но я пошёл бухать от нововведений) Отличная статья, благодарю!


    1. friflex_dev Автор
      08.08.2024 11:13

      Спасибо за отклик, мы стараемся делать переводы быстро и качественно! Тоже заценили обновление и планируем внедрять