1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/CarGuo-GSYFlutterBook

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Flutter-327.md 34 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 10.03.2025 00:06 5767d61

Flutter 3.27 вышел, давайте посмотрим, что нового!

Flutter 3.27 уже здесь, и этот выпуск включает множество улучшений, среди которых:

  • Оптимизация компонентов стиля Cupertino
  • Изменение тем и контроллеров в Material, включая ранее обсуждавшиеся изменения расстояния между рядами и колоннами (row and column spacing)
  • Включение по умолчанию Android Impeller и улучшение производительности iOS
  • Поддержка цветового пространства P3 для UI
  • Улучшения для веб-платформы
  • Поддержка Swift Package Manager
  • Поддержка ранее обсуждаемых функций "Edge to Edge" и Android Freeform
  • Обновление данных скачивания pub
  • Большое количество улучшений и оптимизации DevTools, включая сохранение данных при отключении устройства
  • Отказ от поддержки плагинов для старых версий Dart SDK и Objective-C (OC)

Framework

Cupertino

Без сомнения, после того как менеджер продукта Flutter для iOS вернулся на свою должность, оптимизация компонентов стиля Cupertino значительно ускорилась. В выпуске 3.27 были сделаны дальнейшие улучшения высокой степени детализации для компонентов стиля Cupertino, таких как:- Изменены размеры, цвета, ширина контура и эффект нажатия для CupertinoCheckbox и CupertinoRadio.

  • Добавлены новые свойства для CupertinoRadio, CupertinoCheckbox и CupertinoSwitch: курсор мыши, семантические метки, изображения Thumb и заполнение цветом.
  • Изменены некоторые свойства, такие как отказ от использования inactive для CupertinoCheckbox и переименование track для CupertinoSwitch.
  • Обновлены параметры Thumb Radius, Separator Height, заполнение, тень и методика масштабирования Thumb для CupertinoSlidingSegmentedControl. Теперь поддерживаются отдельные отключения сегментов и пропорциональное расположение содержимого сегмента.

Кроме того, фоновая поддержка прозрачности для CupertinoNavigationBar и CupertinoSliverNavigationBar позволяет использовать одинаковый цвет фона при развернутом состоянии навигационной панели Sliver, а при свёрнутом состоянии — различные пользовательски настраиваемые цвета (и возможность линейной интерполяции этих цветов при скролле).

Помимо этого, в Flutter 3.27 добавлена новая энумерация CupertinoButtonSize, а также новый атрибут sizeStyle для CupertinoButton, который позволяет адаптироваться к стилю кнопок в iOS 15+. Новый конструктор CupertinoButton.tinted позволяет создавать кнопки с полупрозрачным фоном, а также добавлен новый метод onLongPress, позволяющий выполнять действия через долгое нажатие.

Теперь поддерживаются прокрутка до выбранного элемента в CupertinoPicker и CupertinoDatePicker:

CupertinoAlertDialog теперь поддерживает нажатие и свайпы:

Другие изменения:- CupertinoActionSheet был скорректирован для всех системных текстовых размеров, а также поддерживает тактильную обратную связь при свайпах на кнопках

  • CupertinoContextMenu поддерживает прокрутку при выходе за границы экрана
  • CupertinoDatePicker больше не обрезает длинные содержимые в своих колонках
  • CupertinoMagnifier поддерживает масштабирование благодаря предоставлению коэффициента увеличения## Материал

В версии 3.27 были перестроены темы CardTheme, DialogTheme и TabBarTheme. Вместо этого используются новые объекты CardThemeData, DialogThemeData и TabBarThemeData, чтобы соответствовать существующим стандартам библиотеки Material.

Другие изменения в Material:

  • Добавлен атрибут direction для SegmentedButton, что позволяет проектам поддерживать вертикальное выравнивание

  • В методах styleFrom для классов, связанных с ButtonStyleButton (ElevatedButton, FilledButton, OutlinedButton, TextButton, MenuItemButton и SubmenuButton), добавлены дополнительные свойства для работы с иконками, что позволяет поддерживать больше вариантов настроек
  • Размер и цвет иконок в классе ButtonStyleButton были скорректированы для соответствия стандартам Material 3
  • При открытии меню (drawer) поведение прокрутки AppBar корректно сохраняется, обеспечивая соответствие оригинальному опыту Android.
  • MenuAnchor был улучшен через исправление фокусировки, а также решено несколько проблем с DropdownMenu, включая проблемы прокрутки в вложенных скроллируемых объектах и механизмы фильтрации

CarouselView

В версии 3.27 для CarouselView был добавлен метод weighted, который позволяет реализовать более динамичные макеты в слайдере путём настройки параметров flexWeights в конструкторе:> Например, массив [3, 2, 1] создает макет типа "multi-browse", [7, 1] — "hero" и [1, 7, 1] — "centred hero". Эти значения представляют относительный вес каждого элемента в слайдере и могут быть настроены для удовлетворения конкретных потребностей пользователя.## Смешивание переходов маршрутов

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

Когда новый маршрут входит в интерфейс, иногда требуется от предыдущего маршрута выполнить определённый переход, синхронизирующийся с входящим переходом нового маршрута. Поэтому теперь ModalRoutes могут предоставлять друг другу выходные переходные конструкторы, обеспечивая таким образом, что входящие и выходящие переходы всегда синхронизированы. Это позволяет использовать Flutter's Navigator и Router для предоставления нескольких вариантов переходов маршрутов на одной странице.

Улучшения выбора текста

Это уже старая тема, которую несколько версий назад улучшили. Начиная с 3.27, Flutter's SelectionArea теперь поддерживает жест Shift + Click, который перемещает диапазон выделенного текста до местоположения клика на Linux, macOS и Windows.

Кроме того, можно очистить выделение в SelectionArea и SelectableRegion, используя метод clearSelection на объекте SelectableRegionState.

Теперь SelectableRegionState также доступен через SelectionArea. Для этого следует предоставить ему GlobalKey и получить доступ к его SelectionAreaState.selectableRegion.

Наконец, начиная с 3.27, были исправлены некоторые проблемы в RenderParagraph, связанные с работой SelectionArea или SelectableRegion после изменения размера окна и при нажатии вне текста.## Расположение между строками и столбцами

И это тоже старая тема, над которой работали много лет. Начиная с версии 3.27, стало возможно использовать Rows и Columns со свойством spacing для установки расстояний между элементами:

Ядро

Android Impeller

С версии 3.27 Impeller становится основным движком рендера для устройств Android, а на более старых устройствах Android и тех, где не поддерживается Vulkan, будет использоваться Skia движок рендера как раньше.

Если вам нужно отключить Impeller, вы можете передать --no-enable-impeller командной строке или добавить следующее содержание в AndroidManifest.xml:

<meta-data
    android:name="io.flutter.embedding.android.EnableImpeller"
    android:value="false" />

При этом Flutter продолжает работать над улучшением производительности и верности изображения при использовании Impeller в Android. В планах также удаление поддержки Skia как fallback для OpenGL-backend Impeller после достижения готовности к выпуску. Однако, в отличие от iOS, экосистема аппаратных средств Android более разнообразна, поэтому Impeller требует большего количества отзывов сообщества для дальнейших улучшений.

Оптимизация для iOSВ ранних версиях Flutter пользователи могли столкнуться с проблемой, когда приложение на устройствах iOS каждый кадр ожидал несколько миллисекунд из-за давления композитора. Это давление рассматривалось как задержка начала растрового вывода, что приводило к потере кадров и замедлению, особенно на устройствах с высокими частотами кадровых обновлений.Начиная с версии 3.27 была внедрена новая реализация поверхности рендеринга Metal, которая позволяет более последовательному началу растрового вывода после завершения рабочих нагрузок UI.

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

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

Цветовое пространство

Что касается цвета, были сделаны изменения в области широкого цветового пространства, то есть ранее обсуждавшиеся изменения в цветовых значениях Flutter, связанные с миграцией таких API, как withOpacity, fromARGB.

Теперь версия 3.27 поддерживает определение UI в цветовом пространстве DisplayP3, а не только эффекты изображений в P3.

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

  • Декодирование изображений в Safari и Firefox теперь выполняется с помощью элемента <img>, а не с использованием WebAssembly декодера для всех статических изображений. Это устраняет задержки при декодировании изображений и снижает использование памяти WebAssembly.
  • PlatformView был оптимизирован, что привело к уменьшению количества слоёв канвы, повышая эффективность отрисовки.
  • Все официальные плагины и пакеты теперь совместимы с WebAssembly.
  • Внесены несколько исправлений доступности для заголовков, диалоговых окон, паролей, iOS клавиатур, ссылок и скроллируемых объектов.
  • Устранены многие ошибки рендеринга в CanvasKit и Skwasm рендерах, включая фильтрацию изображений, вырезание и использование памяти объектами типа Paint.
  • Улучшена прокрутка при перемещении во множественном режиме просмотра. После прекращения поддержки HTML рендера, адаптация и улучшение Flutter Web прошли значительно гладче. Извлечение удаления HTML также было включено в основной канал и будет выпущено в первом стабильном выпуске Flutter 2025 года.> Подробнее о том, как Flutter Web официально перестал использовать HTML рендера, можно прочитать здесь: https://juejin.cn/post/7446613741627736091

iOS

Flutter переходит на использование Swift Package Manager, что мы уже обсуждали ранее. Это включает в себя официальное объявление CocoaPods о переходе в режим поддержки, где они больше не активно развивают новые функции, а будущее принадлежит Swift Package Manager. Переход на использование Swift Package Manager приносит несколько преимуществ:

  • Экосистема Swift пакетов: плагины Flutter смогут использовать постоянно расширяющуюся экосистему Swift пакетов;
  • Упрощение среды Flutter: Swift Package Manager встроен в Xcode, поэтому нет необходимости устанавливать Ruby и CocoaPods.

До этого момента поддержка Swift Package Manager была доступна только в "main" ветке Flutter. С версии 3.27 функционал Swift Package Manager стал доступен и в "beta" и "stable" каналах, хотя по умолчанию он все еще находится в выключенном состоянии.

В будущем Pub.dev будет проверять совместимость плагинов с Swift Package Manager, и те, кто не соответствует требованиям, будут получать неполный балл за свой пакет.

Подробнее можно найти здесь: https://juejin.cn/post/7399592120128978970

Android

По умолчанию, приложения Flutter будут запускаться в полноэкранном режиме с использованием технологии Edge-to-Edge на устройствах Android 15+:


Этот текст был переведён согласно указанным правилам, сохранив исходное форматирование и структуру.

Это мы уже обсуждали ранее. Android Freeform позволяет пользователям изменять размер окон приложений и был представлен как опция для разработчиков. Библиотеки Flutter SafeArea и MediaQuery были обновлены для поддержки перемещения свободных окон через аппаратные разрывы.

Подробнее можно узнать здесь: https://juejin.cn/post/7441865024613646345

Кроме того, разработчики теперь могут использовать файл build.gradle.kts, поскольку Flutter Tools поддерживают Kotlin файлы сборки, в то время как Groovy остаётся поддерживаемым языком Gradle.

Версия Flutter 3.27 является последней, которая поддерживает старый метод применения скриптов Gradle плагинов, подробнее о миграции можно посмотреть здесь: https://docs.flutter.dev/release/breaking-changes/flutter-gradle-plugin-apply#Экосистема

Счётчики загрузок пакетов на pub.dev

Теперь при просмотре страницы пакета на pub вы видите количество загрузок за последние 30 дней вместо прежнего "рейтинга популярности".

КартинкаКроме того, был добавлен интерактивный миникалендарь, который показывает недельную активность загрузок в течение определённого периода времени. Этот график помогает разработчикам и авторам пакетов отслеживать тренды использования пакетов, например, он может указывать на то, что выпуск новой версии привёл к увеличению использования, или что популярность какого-либо пакета возрастает или снижается.## Pub workspaces

Мы уже говорили о mono-repos и workspaces в предыдущей статье "Flutter переходит на Mono-repo и поддерживает workspaces". Начиная с Dart 3.6, официально представлены Pub workspaces, чтобы поддерживать разработку нескольких связанных пакетов в одном mono-repo. Это достигается путём определения корневого pubspec, который ссылается на другие пакеты внутри рабочего пространства, таким образом, выполнение команды pub get в любом месте внутри рабочего пространства приводит к совместному анализу всех пакетов. Это гарантирует, что все пакеты используют согласованное множество зависимостей:

name: workspace
environment:
  sdk: ^3.5.0
workspace:
  - packages/package_a
  - packages/package_b

Картинка

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

Подробнее см.: https://juejin.cn/post/7433673239426007078

Автоматическое публикование Flutter-пакетов из GitHub

Flutter расширил возможности setup-dart publish GitHub Actions workflow, чтобы поддерживать автоматическую публикацию Flutter-пакетов на pub.dev.## Обновление плагина In-app purchases для iOS и macOS

Flutter добавил поддержку StoreKit 2 в пакет in_app_purchase_storekit, чтобы перейти от устаревших API StoreKit 1 в iOS 18. Эта поддержка позволит добавлять новые функции StoreKit 2, такие как более эффективное управление подписками.

DevTools

Обновления DevTools

В версии 3.27 включены новые функции и улучшения DevTools, а также некоторые интересные экспериментальные возможности. Сначала, DevTools добавили поддержку проверки настроек глубинных ссылок iOS в инструмент Flutter Deep Links, теперь можно проверять глубинные ссылки как для Android, так и для iOS.

image

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

Новые возможности версии 3.27

Поддержка экспорта сетевых данных в файл .har и возможность загружать снимки памяти в DevTools для просмотра данных при отсутствии подключения DevTools к запущенному приложению.Кроме того, если вы когда-либо сталкивались с потерей данных инструмента памяти во время отладки проблем памяти с помощью DevTools из-за аварийного завершения работы приложения, то эта версия исправляет эту UX-проблему. Версия 3.27 позволяет продолжать просматривать последние данные инструмента памяти после аварийного завершения работы приложения даже после его отключения.## Flutter Inspector

Flutter Inspector претерпел значительные изменения для повышения удобства использования и усиления процесса отладки графического интерфейса. Разработчики могут активировать новый Inspector, переключив настройку "New Inspector":

image

Изменения включают:

  • Ужатое дерево виджетов, что делает просмотр глубоко вложенных деревьев виджетов Flutter более удобным, особенно полезно при использовании Flutter Inspector в среде разработки;
  • Опция для выбора включения реализационных виджетов в дерево виджетов, где реализационные виджеты — это те виджеты, которые добавлены в дерево виджетов фреймворком Flutter или другими библиотеками, но не являются частью вашего кода приложения;
  • Подробный вид для выбранного виджета, который показывает встроенное окно просмотра макета, свойства виджета и объекта рендера, а также браузер Flex макета для Flex виджета и его потомков.

Пробуйте WebAssembly

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

Это должно повысить производительность по сравнению со стандартной версией JavaScript, хотя данная функция находится на этапе экспериментальной разработки:

image

Внезапные изменения## MD3

Flutter всё ещё очень заинтересован в MD3, можно сказать, что Google тоже очень заинтересованы. Последние токены MD3 (версия bk_6.1) уже применены к библиотеке Material Flutter.

Обновление токенов Material Design включает новую карту цветовых ролей для режима светлого оформления, чтобы сделать внешний вид более привлекательным, сохранив при этом доступное соотношение контрастности:

  • На-основной-контейнер (Основной10 до Основной30)
  • На-вторичный-контейнер (Вторичный10 до Вторичный30)
  • На-терциарный-контейнер (Терциарный10 до Терциарный30)
  • На-ошибочный-контейнер (Ошибка10 до Ошибка30)

Кроме того, цвет границ компонентов типа Chip (включая Chip, ActionChip, ChoiceChip, FilterChip и InputChip) был обновлен с ColorScheme.outline на ColorScheme.outlineVariant.

Objective-C для iOS

С момента выпуска Flutter 1.9.1 в 2019 году новые проекты iOS по умолчанию используют Swift. Создание новых проектов iOS на Objective-C теперь отменено (flutter create --ios-language objc). Этот флаг будет удалён в будущих версиях Flutter.

Разработчики всё ещё могут открыть проект Xcode и добавить файлы на Objective-C, включая плагины. Приложения Android со значком flutter create --android-language java продолжают поддерживать Java.

По умолчанию активированное глубокое связываниеПо умолчанию значение флага глубокого связывания Flutter было изменено с false на true, что означает, что глубокое связывание теперь активируется по умолчанию. Если вы используете сторонние плагины для глубокой связи, такие как:- Firebase Dynamic Links

В этом случае вам потребуется вручную деактивировать этот флаг глубокой связи Flutter, установив его значение в false.

<meta-data android:name="flutter_deeplinking_enabled" android:value="false" />

Дополнительно см.: https://docs.google.com/document/d/1TUhaEhNdi2BUgKWQFEbOzJgmUAlLJwIAhnFfZraKgQs/edit?usp=sharing

Отказ от поддержки старых версий SDK в IDE

С версии Flutter 3.27 поддержка старых версий SDK в IDE будет прекращена. С версии Dart 3.6 Flutter начнёт отказываться от поддержки старых версий SDK Dart (раньше чем 3.0, выпущенные в мае 2023 года).

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

При выходе Dart 3.7 (ожидается во втором квартале 2025 года) поддержка этих старых версий SDK будет полностью прекращена, а будущие версии плагинов могут не совместимы с этими старыми версиями SDK.

Дополнительно см.: https://medium.com/flutter/whats-new-in-flutter-3-27-28341129570c# ПоследнееМожно заметить, что Flutter 3.27 включает множество обновлений, хотя новые выпуски для ПК пока еще не появились. Однако мы уже обсуждали этот вопрос ранее, например, в статье «Новые достижения Flutter PC с поддержкой нескольких окон»[1] мы говорили о текущей реализации и демонстрации множества окон, а также в статье «Flutter наконец официально планирует поддержку предварительного просмотра виджетов IDE»[2], можно увидеть прогресс поддержки предварительного просмотра в IDE.Многие новые и старые функции должны выйти в первом или втором квартале 2025 года, поэтому вы собираетесь попробовать Flutter 3.27 или будете ждать версии 3.27.6?

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/CarGuo-GSYFlutterBook.git
git@api.gitlife.ru:oschina-mirror/CarGuo-GSYFlutterBook.git
oschina-mirror
CarGuo-GSYFlutterBook
CarGuo-GSYFlutterBook
master