Hola Amigos! На связи Тимур Моисеев, руководитель мобильной разработки в Amiga. В IT я более 20 лет, последние 4 года плотно занимаюсь мобильной разработкой на фреймворке Flutter. Вместе с командой ведем телеграм-канал Flutter.Много, куда приглашаю всех неравнодушных к кроссплатформенности.
Вышел большой материал об изменениях во фреймворке Flutter 3.13: двумерный скроллинг, более быстрая графика, обновленный модуль Material 3 и многое другое. Делюсь с вами переводом первой части, в которой будет идти речь про:
Улучшения в графическом движке рендеринга Impeller.
Новый API для улучшения поддержки складных устройств.
Фреймворк Material.
Вторую часть выпущу совсем скоро, поэтому советую подписаться на наш тг-канал, чтобы не пропустить анонс.
Движок Impeller
Внесены улучшения в Impeller — новый графический движок рендеринга, добавлены новые Engine API для складных устройств.
Повышение производительности на iOS
В результате множества оптимизаций движок Impeller на iOS теперь не только снизил задержку (благодаря полному устранению jank при компиляции шейдеров), но и в некоторых бенчмарках демонстрирует более высокую среднюю пропускную способность. В частности, в бенчмарке производительности переходов flutter/gallery, среднее время растеризации кадров теперь примерно в два раза меньше, чем в Skia.
Улучшено среднее время растеризации кадров в бенчмарке производительности переходов Flutter Gallery на iPhone 11. Рассматриваемый временной интервал соответствует периоду между выходами релизов 3.10 – 3.13.
Этот прогресс был достигнут благодаря следующим видам оптимизации:
Включено управление грязными областями и частичная перерисовка (flutter/engine#40959)
Реализовано одновременное кодирование проходов рендеринга (flutter/engine#42028)
Внесены многочисленные улучшения в рендеринг текста (flutter/engine#41290, flutter/engine#41780, flutter/engine#42417)
Добавлен быстрый путь для выпуклых фигур, чтобы избежать дорогостоящих вызовов тесселяции (flutter/engine#41834)
Начато использование вычислительных шейдеров для нескольких операций (flutter/engine#42192)
Добавлена более тщательная очистка операций рисования за пределами границ (flutter/engine#41606)
Улучшение точности изображения
В версии 3.10 было анонсировано, что более широкий цветовой диапазон доступен под флажком при использовании Impeller. В версии 3.13 при использовании Impeller широкий цветовой диапазон доступен по умолчанию в iOS.
Обновление информации о ходе работы над Impeller для Android
Продолжается работа над бэкендом Vulkan для Impeller, однако он еще не достиг того уровня качества, при котором было бы целесообразно проводить официальное предварительное тестирование.
Открытие периода предварительного просмотра Impeller на Android в стабильной версии запланировано на конец этого года. Несмотря на то что Impeller на Android еще не готов для предварительного просмотра, в бэкендах OpenGL и Vulkan уже реализованы преимущества множества оптимизаций, сделанных в HAL Impeller за последний год. В частности, среднее время растеризации кадров для Android значительно улучшилось в бенчмарке производительности переходов flutter/gallery. В настоящее время ведется работа по дальнейшему улучшению качества предварительного просмотра на Android.
Impeller (и Wonderous) для macOS
Теперь Impeller для macOS доступен в предварительной версии, его можно протестировать и включить в своем приложении с помощью инструкций на странице Impeller.
Опробуйте Impeller на macOS, скачав Wonderous из магазина App Store.
Новый Engine API
Для улучшения поддержки складных устройств был добавлен новый API для получения различных параметров дисплея. Новый геттер FlutterView.display возвращает объект Display, который предоставляет информацию о физическом размере, соотношении сторон и частоте обновления дисплея. Ознакомиться с примером использования нового API можно в разделе setPreferredOrientations.
Фреймворк Material
В фреймворк Material внесен ряд улучшений, позволяющих:
улучшить адаптивность к платформам,
расширить возможности настройки,
добавить новые функции.
Распознавание символов в поле TextField
При использовании TextField на iOS пользователи автоматически получают доступ к камере устройства для распознавания символов и вставки их в поле.
Без вклада членов сообщества luckysmg (автор) и tgucio (рецензент) такая возможность не появилась бы. Эта функция, объединившая движок и фреймворк, потребовала написания 1000 строк и внесения 70 коммитов.
Диалог, адаптивный к платформе
В AlertDialog добавлен адаптивный конструктор и функция showAdaptiveDialog, позволяющая отображать диалог Material или Cupertino в зависимости от используемой платформы.
Теперь при использовании AlertDialog.adaptive() отображается виджет CupertinoAlertDialog на iOS
и Material AlertDialog на Android.
CupertinoDatePicker с выбором месяца и года
В CupertinoDatePicker добавлена возможность выбора месяца и года.
Радиокнопки в стиле Cupertino (iOS)
В CupertinoRadio добавлено свойство useCheckmarkStyle, что позволяет виджетам Radio.adaptive и RadioListTile.adaptive использовать стили iOS.
Дополнительные возможности настройки виджетов Material
Был сделан ряд улучшений, облегчающих настройку дизайна виджетов Material:
Для настройки виджета ошибки, отображаемой в текстовом поле, можно использовать свойство error в InputDecoration (вместо строки)
В ButtonSegment можно добавлять всплывающие подсказки
Появилась возможность настройки отступа в списках ExpansionPanelList с помощью свойства materialGapSize
Для переключателей можно настраивать ширину обводки с помощью свойства trackOutlineWidth)
Внутренние отступы в NavigationDrawer можно настраивать с помощью свойства tilePadding
В TabBar можно выбирать способ выравнивания вкладок с помощью свойства alignment
Цвет MaterialState для элемента chip
https://github.com/flutter/flutter/pull/128584 Теперь можно настраивать цвет элементов chip для всех возможных состояний.
Элементы chip с большей высотой
Согласно спецификации Material 3, были добавлены варианты FilterChip.elevated, ChoiceChip.elevated и ActionChip.elevated.
onSubmitted для SearchBar
Позволяет запускать другое действие после того, как пользователь завершит ввод текста и нажмет кнопку Done на клавиатуре.
BaseTapAndDragGestureRecognizer
Добавлен базовый класс для группы классов, поддерживающих касание + панорамирование (TapAndPanGestureRecognizer) и касание + горизонтальное перетаскивание (TapAndHorizontalDragGestureRecognizer). Эти классы уже применялись для реализации собственных жестов в текстовых полях. Они отлично подходят и для решения других задач, например, для масштабирования виджета двойным касанием + вертикального перетаскивания.
Думаю, что на сегодня обновлений достаточно. За выпуском второй части следите на моем тг-канале.