Оригинальная статья: https://medium.com/flutter/whats-new-in-flutter-3-3-893c7b9af1ff
Flutter 3.3 официально выпущен, этот выпуск включает обновления для Flutter Web, десктопной версии, а также улучшения производительности работы с текстом. Кроме того, были внедрены новые обновления для go_router, DevTools и расширения Visual Studio Code.
Ранее в Flutter Web часто возникали проблемы с тем, что поведение выделения текста не совпадало с ожидаемым, поскольку, как и Flutter App, нативный веб состоит из дерева элементов.
В традиционных веб-приложениях разработчики могут использовать жест прокрутки мыши для выбора нескольких веб-элементов, но это было сложно реализовать в Flutter Web.
Однако начиная с версии 3.3, благодаря введению компонента SelectableArea
, любой потомок этого виджета может свободно активировать эту возможность.
Чтобы воспользоваться этой мощной новой возможностью, просто используйте SelectionArea
для обертывания ваших страниц, например, внутри Scaffold
маршрута, после чего Flutter автоматически выполнит все необходимые действия.
Для более подробного понимания этой новой возможности обратитесь к API SelectableArea.
Дополнительную информацию см. в документации по Flutter жестам трекпада и соответствующих pull requests на GitHub:
CupertinoTextField
, TextField
и EditableText
. Для использования этой функции достаточно обновиться до версии Flutter 3.3.Для улучшения поддержки редактирования богатого текста была представлена платформенная реализация TextInputPlugin
. Раньше TextInputClient
передавал только новые состояния редактирования, но не предоставлял информации о различиях между новым и старым состоянием. Теперь TextEditingDeltas
заполняют этот пробел для DeltaTextInputClient
.
Используя эти изменения, разработчики могут создать поле ввода со стилизованным диапазоном, которое расширяется и сжимается при наборе текста пользователями.
Чтобы узнать больше, обратитесь к демонстрационному примеру богатого текстового редактора.
Команда Flutter продолжает мигрировать более многочисленные компоненты Material Design 3 в Flutter. В этом выпуске представлены обновления для IconButton
, Chips
и AppBar
.
Чтобы отслеживать прогресс миграции Material Design 3, просмотрите тикет GitHub "Приведение Material 3 к Flutter".
Ранее версию Windows-приложений можно было установить через специфичные для Windows файлы, что не совпадало с подходами других платформ.
Но теперь разработчики могут указывать версию Windows-приложения в файле проекта pubspec.yaml
и параметрах сборки.
Подробнее о том, как устанавливать номер версии приложения, читайте в документации docs.flutter.dev и руководстве по миграции.
Чтобы расширить возможности нативной системы навигации Flutter, команда выпустила обновленную версию пакета go_router
, который делает маршрутизацию проще для мобильных устройств, десктопных приложений и веб-приложений. Пакет go_router
поддерживается командой Flutter и упрощает маршрутизацию за счет предоставления декларативного, основанного на URL API, что делает навигацию проще и улучшает работу с глубокими ссылками.
В последней версии (5.0) приложения могут использовать асинхронный код для переадресации и включают значительные изменения, описанные в руководстве по миграции. Для получения дополнительной информации просмотрите страницу навигации и маршрутизации на сайте docs.flutter.dev.# Улучшение расширений для VS Code
У расширения Flutter для Visual Studio Code есть несколько обновлений, включая улучшенное добавление зависимостей, разработчики теперь могут использовать Dart: Add Dependency для одновременного добавления нескольких зависимостей через запятую.
С момента выхода последнего стабильного выпуска Flutter были сделаны многочисленные обновления в DevTools, включая улучшение пользовательского опыта и производительности таблиц данных, чтобы быстрее и с меньшим количеством прокруток отображались большие списки событий (#4175).
Для полного списка обновлений после Flutter 3.0, пожалуйста, проверьте следующие объявления:
Этот выпуск повышает производительность загрузки изображений из активов путём устранения копий и снижения давления на сборщик мусора Dart (GC).Ранее при загрузке изображений из активов, API ImageProvider
требовал множества копий сжатых данных; когда активы открывались и представлялись как массив типизированного данных Dart, они копировались в нативный стек, а затем этот массив типизированного данных снова копировался внутрь ui.ImmutableBuffer
.Через #32999 сжатые байты изображения могут быть напрямую загружены в структуру ui.ImmutableBuffer.fromAsset
, используемую для декодирования. Это требует изменения ImageProviders
. Этот процесс также становится быстрее, так как он обходит некоторые дополнительные затраты на планирование, необходимые предыдущему методу, основанному на каналах, особенно в наших микробенчмарках время загрузки изображений увеличивается почти вдвое.
Для получения дополнительной информации и руководства по миграции см. раздел ImageProvider.loadBuffer на сайте docs.flutter.dev.
В стабильной версии 2.10 мы активировали оптимизацию сжатия указателей в Dart на платформе iOS. Однако, благодаря сообщению от Yeatse на GitHub (вопрос #105183), стало известно, что эта оптимизация привела к нежелательным последствиям.
Сжатие указателей в Dart работает путём выделения большого участка виртуальной памяти для хипа Dart. Из-за ограничений на общее количество доступной виртуальной памяти на iOS этот большой объём выделенной памяти снижает количество доступной памяти для других компонентов, таких как плагины Flutter.Хотя отключение сжатия указателей увеличит потребление памяти объектами Dart, это также увеличит доступность памяти для других частей приложения Flutter, что является более желательным направлением.
Apple предоставляет возможность увеличения максимального количества выделяемой виртуальной памяти для приложений, но эта возможность поддерживается только на новых версиях iOS, то есть она недоступна для устройств, использующих те версии iOS, которые всё ещё поддерживаются Flutter.
Ранее разработчики должны были самостоятельно конфигурировать специальные элементы зоны (Zone
) для захвата всех исключений и ошибок приложения. Однако использование специального Zone
негативно влияло на некоторые оптимизации в ядре Dart, что замедляло время старта приложения.
В этой версии разработчики могут захватывать все исключения и ошибки через установку обратного вызова вместо использования специального Zone
.
Для получения дополнительной информации см. раздел PlatformDispatcher.onError на странице Flutter сайта docs.flutter.dev.
Фрагментные шейдеры, написанные на GLSL и перечисленные в списке Flutter manifest в поле shaders:
, теперь автоматически компилируются в правильный формат, который может понять движок, и объединяются с приложением в качестве ресурсов.Это изменение позволяет разработчикам больше не использовать сторонние инструменты для ручной компиляции шейдеров. В будущем можно будет рассматривать API FragmentProgram
движка как принимающий только выход Flutter build tools. Конечно, пока этого нет, но такие изменения запланированы для будущих версий, как указано в документации по улучшению поддержки FragmentProgram API.> Пример этого изменения см. в примере Flutter шейдеров.
Ранее движок Flutter всегда выравнивал композированные слои с точной границей пикселей, так как это повышало производительность отрисовки на старых моделях iPhone (32-битных).
С момента добавления поддержки десктопов мы заметили, что это приводило к наблюдаемому эффекту захвата, поскольку соотношение устройств к пикселям экрана обычно намного ниже, например, на устройствах с низким коэффициентом DPI можно наблюдать явное захватывание при появлении подсказок.
После того как было установлено, что этот пиксельный захват больше не требуется для новых моделей iPhone, #103909 был удален из движка Flutter для повышения точности отображения на десктопах.
Кроме того, мы обнаружили, что удаление этого пиксельного захвата стабилизирует некоторые наши золотые тестовые изображения, которые часто меняются из-за мелких различий в рендеринге линий.# Изменения для поддерживаемых платформ
Как объявлено ранее в версии 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 и более поздних версий, не будут работать на этих устройствах.
В стабильной версии четвертого квартала 2022 года мы планируем прекратить поддержку версий macOS 10.11 и 10.12.
Это означает, что приложения, скомпилированные с использованием стабильной версии Flutter SDK после этой даты, не будут работать на этих версиях, а минимальная поддерживаемая версия macOS будет увеличена до 10.13 High Sierra.
В ближайшей версии Xcode 14 отправка iOS приложений будет запрещена с активированным Bitcode, и проекты с активированным Bitcode будут выводить предупреждения сборки в этой версии Xcode. Исходя из этого, Flutter планирует отказаться от поддержки Bitcode в будущих стабильных версиях.По умолчанию Bitcode не активирован в Flutter приложениях, поэтому мы ожидаем, что это не повлияет на большинство разработчиков. Однако, если вы вручательно включили bitcode в проекте Xcode, сразу отключите его после обновления до Xcode 14. Это можно сделать, открыв ios/Runner.xcworkspace, нажав настройки сборки Enable Bitcode и установив её значение в No. Разработчики Add-to-app должны отключить этот параметр в основном проекте Xcode.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )