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

OSCHINA-MIRROR/CarGuo-GSYFlutterBook

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

Оригинальная статья: https://medium.com/flutter/whats-new-in-flutter-3-3-893c7b9af1ff

Flutter 3.3 официально выпущен, этот выпуск включает обновления для Flutter Web, десктопной версии, а также улучшения производительности работы с текстом. Кроме того, были внедрены новые обновления для go_router, DevTools и расширения Visual Studio Code.

Framework

Глобальное выделение текста

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

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

Однако начиная с версии 3.3, благодаря введению компонента SelectableArea, любой потомок этого виджета может свободно активировать эту возможность.

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

Для более подробного понимания этой новой возможности обратитесь к API SelectableArea.

Ввод с помощью трекпадаFlutter 3.3 улучшил поддержку ввода с использованием тачпада, что обеспечивает более богатую и плавную логику управления, а также снижает количество ошибочных событий при определённых условиях.Например, на странице Drag a widget раздела Flutter cookbook выполните следующие шаги:

    1. Уменьшите размер окна так, чтобы верхняя часть была скроллируемой.
    1. Наведите курсор на верхнюю часть.
    1. Прокрутите содержимое с помощью трекпада.
    1. До выпуска Flutter 3.3 прокрутка с трекпада вызывала перемещение элемента, поскольку Flutter отправлял события, имитирующие общие события.
    1. После выпуска Flutter 3.3 прокрутка с трекпада корректно прокручивает список, поскольку Flutter предоставляет "жест прокрутки", который невозможно распознать для карточек, но можно для прокрутки.

Дополнительную информацию см. в документации по Flutter жестам трекпада и соответствующих pull requests на GitHub:

ScribbleБлагодаря вкладу участника сообщества fbcouch, Flutter теперь поддерживает использование Apple Pencil для рукописного ввода с помощью Scribble в iPadOS.По умолчанию эта функция активирована для компонентов CupertinoTextField, TextField и EditableText. Для использования этой функции достаточно обновиться до версии Flutter 3.3.

0_SlsnQUfdOTijdsyF.gif

Ввод текста

Для улучшения поддержки редактирования богатого текста была представлена платформенная реализация TextInputPlugin. Раньше TextInputClient передавал только новые состояния редактирования, но не предоставлял информации о различиях между новым и старым состоянием. Теперь TextEditingDeltas заполняют этот пробел для DeltaTextInputClient.

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

Чтобы узнать больше, обратитесь к демонстрационному примеру богатого текстового редактора.

Material Design 3

Команда Flutter продолжает мигрировать более многочисленные компоненты Material Design 3 в Flutter. В этом выпуске представлены обновления для IconButton, Chips и AppBar.

Чтобы отслеживать прогресс миграции Material Design 3, просмотрите тикет GitHub "Приведение Material 3 к Flutter".

Кнопка IconButton

Chips

AppBar среднего и большого размера

Десктоп

Windows

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

Но теперь разработчики могут указывать версию Windows-приложения в файле проекта pubspec.yaml и параметрах сборки.

Подробнее о том, как устанавливать номер версии приложения, читайте в документации docs.flutter.dev и руководстве по миграции.

Пакеты

go_router

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

В последней версии (5.0) приложения могут использовать асинхронный код для переадресации и включают значительные изменения, описанные в руководстве по миграции. Для получения дополнительной информации просмотрите страницу навигации и маршрутизации на сайте docs.flutter.dev.# Улучшение расширений для VS Code

У расширения Flutter для Visual Studio Code есть несколько обновлений, включая улучшенное добавление зависимостей, разработчики теперь могут использовать Dart: Add Dependency для одновременного добавления нескольких зависимостей через запятую.

Обновления Flutter Developer Tools

С момента выхода последнего стабильного выпуска Flutter были сделаны многочисленные обновления в DevTools, включая улучшение пользовательского опыта и производительности таблиц данных, чтобы быстрее и с меньшим количеством прокруток отображались большие списки событий (#4175).

Для полного списка обновлений после Flutter 3.0, пожалуйста, проверьте следующие объявления:

Производительность

Улучшение буфера растра

Этот выпуск повышает производительность загрузки изображений из активов путём устранения копий и снижения давления на сборщик мусора Dart (GC).Ранее при загрузке изображений из активов, API ImageProvider требовал множества копий сжатых данных; когда активы открывались и представлялись как массив типизированного данных Dart, они копировались в нативный стек, а затем этот массив типизированного данных снова копировался внутрь ui.ImmutableBuffer.Через #32999 сжатые байты изображения могут быть напрямую загружены в структуру ui.ImmutableBuffer.fromAsset, используемую для декодирования. Это требует изменения ImageProviders. Этот процесс также становится быстрее, так как он обходит некоторые дополнительные затраты на планирование, необходимые предыдущему методу, основанному на каналах, особенно в наших микробенчмарках время загрузки изображений увеличивается почти вдвое.

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

Устойчивость

Отключение сжатия указателей в iOS

В стабильной версии 2.10 мы активировали оптимизацию сжатия указателей в Dart на платформе iOS. Однако, благодаря сообщению от Yeatse на GitHub (вопрос #105183), стало известно, что эта оптимизация привела к нежелательным последствиям.

Сжатие указателей в Dart работает путём выделения большого участка виртуальной памяти для хипа Dart. Из-за ограничений на общее количество доступной виртуальной памяти на iOS этот большой объём выделенной памяти снижает количество доступной памяти для других компонентов, таких как плагины Flutter.Хотя отключение сжатия указателей увеличит потребление памяти объектами Dart, это также увеличит доступность памяти для других частей приложения Flutter, что является более желательным направлением.

Apple предоставляет возможность увеличения максимального количества выделяемой виртуальной памяти для приложений, но эта возможность поддерживается только на новых версиях iOS, то есть она недоступна для устройств, использующих те версии iOS, которые всё ещё поддерживаются Flutter.

Улучшения API

PlatformDispatcher.onError

Ранее разработчики должны были самостоятельно конфигурировать специальные элементы зоны (Zone) для захвата всех исключений и ошибок приложения. Однако использование специального Zone негативно влияло на некоторые оптимизации в ядре Dart, что замедляло время старта приложения.

В этой версии разработчики могут захватывать все исключения и ошибки через установку обратного вызова вместо использования специального Zone.

Для получения дополнительной информации см. раздел PlatformDispatcher.onError на странице Flutter сайта docs.flutter.dev.

Изменения в FragmentProgram

Фрагментные шейдеры, написанные на GLSL и перечисленные в списке Flutter manifest в поле shaders:, теперь автоматически компилируются в правильный формат, который может понять движок, и объединяются с приложением в качестве ресурсов.Это изменение позволяет разработчикам больше не использовать сторонние инструменты для ручной компиляции шейдеров. В будущем можно будет рассматривать API FragmentProgram движка как принимающий только выход Flutter build tools. Конечно, пока этого нет, но такие изменения запланированы для будущих версий, как указано в документации по улучшению поддержки FragmentProgram API.> Пример этого изменения см. в примере Flutter шейдеров.

Дробное преобразование

Ранее движок Flutter всегда выравнивал композированные слои с точной границей пикселей, так как это повышало производительность отрисовки на старых моделях iPhone (32-битных).

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

После того как было установлено, что этот пиксельный захват больше не требуется для новых моделей iPhone, #103909 был удален из движка Flutter для повышения точности отображения на десктопах.

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

Отключение поддержки 32-битных iOS устройств

Как объявлено ранее в версии 3.0, эта версия является последней, поддерживающей 32-битные iOS устройства и версии iOS 9 и 10.

Это изменение затрагивает устройства iPhone 4S, iPhone 5, iPhone 5C и второго, третьего и четвертого поколений iPad.

Устойчивые версии Flutter 3.3 и выше уже не поддерживают 32-битные iOS устройства и версии iOS 9 и 10, что означает, что приложения, созданные на основе Flutter 3.3 и более поздних версий, не будут работать на этих устройствах.

Отключение поддержки macOS 10.11 и 10.12

В стабильной версии четвертого квартала 2022 года мы планируем прекратить поддержку версий macOS 10.11 и 10.12.

Это означает, что приложения, скомпилированные с использованием стабильной версии Flutter SDK после этой даты, не будут работать на этих версиях, а минимальная поддерживаемая версия macOS будет увеличена до 10.13 High Sierra.

Устаревание Bitcode

В ближайшей версии Xcode 14 отправка iOS приложений будет запрещена с активированным Bitcode, и проекты с активированным Bitcode будут выводить предупреждения сборки в этой версии Xcode. Исходя из этого, Flutter планирует отказаться от поддержки Bitcode в будущих стабильных версиях.По умолчанию Bitcode не активирован в Flutter приложениях, поэтому мы ожидаем, что это не повлияет на большинство разработчиков. Однако, если вы вручательно включили bitcode в проекте Xcode, сразу отключите его после обновления до Xcode 14. Это можно сделать, открыв ios/Runner.xcworkspace, нажав настройки сборки Enable Bitcode и установив её значение в No. Разработчики Add-to-app должны отключить этот параметр в основном проекте Xcode.image

Опубликовать ( 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