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

OSCHINA-MIRROR/CarGuo-GSYFlutterBook

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

Google I/O 2023 — выпуск Flutter 3.10, давайте посмотрим, что нового!

Оригинальная статья доступна по ссылке: https://medium.com/flutter/whats-new-in-flutter-3-10-b21db2c38c73

Хотя основной ключевой нотой конференции Google I/O в этом году была сосредоточена на AI, но согласно традициям был выпущен новый стабильный вариант Flutter, хотя это не было версией 4.0, как многие ожидали, а версией 3.10. Номера версий Flutter продолжают удивлять.

Основные улучшения в Flutter 3.10 включают изменения в области веб-разработки, мобильных приложений, графики и безопасности, но главные моменты следующие:

  • По умолчанию для iOS используется Impeller
  • Внедрение новых компонентов Material 3
  • Улучшение производительности iOS, Android получает некоторые улучшения
  • Возможность интеграции веб-приложения без использования iframe

Фреймворк

Material 3

Похоже, что Google очень серьёзно относятся к дизайну Material 3, так как они внедряют новые изменения в соответствии с последней версией Material Design spec, которая включает новые компоненты, темы компонентов и новые визуальные эффекты.

На данный момент разработчики могут выбрать использование Material 3 через флаг useMaterial3 в конфигурации темы MaterialApp. Однако начиная со следующего стабильного выпуска, значение этого флага будет установлено по умолчанию на true.

Для просмотра демонстраций Material 3 можно использовать страницу https://flutter.github.io/samples/material_3.html.

ColorScheme.fromImageProvider

По умолчанию все компоненты Material 3 используют цветовую схему ColorScheme, где основные цвета по умолчанию являются оттенками фиолетового, отличаясь от ранее используемых оттенков голубого.

Кроме возможности настройки цветовой схемы из одного "seed" цвета, теперь также возможно создание пользовательской цветовой схемы с помощью изображений через метод fromImageProvider.

BottomNavigationBar

В новой версии также представлена M3-версия компонента BottomNavigationBar. Хотя M3 использует различные цвета, выделение и высоту, принцип работы остаётся прежним.

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

NavigationDrawer

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

Обновлены цвета и высота Drawer в соответствии с M3, а также выполнены небольшие изменения в дизайне.NavigationDrawer может прокручиваться при необходимости, и если требуется заменить стандартный внешний вид NavigationDrawer, это можно сделать с помощью NavigationDrawerTheme.

Поисковая панель и SearchAnchor

Это новые компоненты Flutter для работы со строками поиска и предиктивной функциональностью.

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

Если требуется заменить стандартный внешний вид SearchBarTheme, это можно сделать с помощью SearchAnchorTheme.

Вторичная панель с вкладками

Flutter теперь по умолчанию поддерживает создание второго уровня панелей с вкладками. Для вторичных вкладок используется TabBar.secondary.

Обновление DatePicker и TimePicker

M3 также обновил DatePicker, изменив цвета, расположение и форму элемента календаря и текстового поля. API остались прежними, но был добавлен DatePickerTheme для настройки внешнего вида компонента.

TimePicker также обновился, изменив цвета, расположение и форму как обычной версии, так и компактной версии.

| | | | ------------------------------------------------------ | ------------------------------------------------------ |## Обновление BottomSheet

M3 также обновил BottomSheet, помимо изменения цвета и формы, добавив возможность использования опциональной ручки для перетаскиивания. Эта функция активируется, когда showDragHandle установлено значение true.

Обновление ListTile

M3 также обновил ListTile, изменив положение и расстояние между элементами, включая content padding, выравнивание leading и trailing элементов управления, минимальную ширину leading, и вертикальное пространство. Однако API остались без изменений.

Обновление TextField M3

M3 теперь поддерживает все нативные жесты для всех компонентов TextField.

Двойной щелчок мышью или тройной щелчок мышью в TextField, а также двойной тап или тройной тап на устройствах с сенсорным экраном имеют одинаковый эффект. По умолчанию, как TextField, так и CupertinoTextField поддерживают эту функцию.

Жесты двойного щелчка/тапа в TextField

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

Жесты тройного щелчка/тапа в TextField

Тройной щелчок:

  • Выделяет абзац, содержащий место клика, в многострочных TextField (Android/Fuchsia/iOS/macOS/Windows).

  • Внутри многострочных TextField (Linux) выделяет строку, содержащую место клика.

  • Выделяет весь текст в однострочном TextField.Тройной тап:

  • Выделяет абзац, содержащий место клика, в многострочных TextField.

  • Выделяет весь текст в однострочном TextField.

Тройной щелчок + перетаскивание:

  • Расширяет выделение внутри абзаца (Android/Fuchsia/iOS/macOS/Windows).
  • Расширяет выделение внутри строки (Linux).

Коротко говоря, жесты мыши и пальцев при двойном и тройном щелчках вызывают различные эффекты выделения, причём Linux имеет некоторые отличия при использовании тройного щелчка.

Поддержка уровня SLSA 1 в Flutter

Фреймворк Flutter теперь использует уровень 1 системы обеспечения цепочки поставок программного обеспечения (SLSA) для сборки, что позволяет реализовать множество безопасных функций, включая:- Скриптовый процесс сборки: Сборочные скрипты Flutter теперь позволяют автоматическую сборку на доверенной платформе сборки, основанной на защищённой архитектуре, что помогает предотвратить подделку артефактов и повышает безопасность цепочки поставок.

  • Множественное одобрение с журналами аудита: Процесс выпуска Flutter выполняется только после одобрения несколькими инженерами, каждое выполнение создаёт журналы для аудита, что гарантирует, что никто не может внедрять изменения между исходным кодом и генерацией артефактов.
  • Происхождение: Бета-версии и стабильные версии теперь используют происхождение для сборки, что означает, что каждый выпуск фреймворка был собран из надёжного источника с ожидаемым содержанием, и каждый выпуск предоставляет ссылки для просмотра и проверки происхождения архива SDK. Эта работа продолжает движение в сторону соответствия SLSA L2 и L3, эти уровни сосредоточены на обеспечении защиты артефактов как во время процесса сборки, так и после его завершения.

Веб

Улучшено время загрузки

В версии 3.10 сокращён размер файла шрифтов иконок путём удаления незадействованных глифов из Material и Cupertino, что привело к более быстрой загрузке.

Уменьшение размера CanvasKit

Браузеры на основе Chromium могут использовать более компактный канал кастомизации CanvasKit, хостящийся на Google gstatic.com, что позволяет ещё больше повысить производительность.

Встраивание элемента

Теперь можно загружать Flutter Web из конкретного элемента страницы без использования iframe. До этой версии Flutter Web требовал заполнения всего основного содержимого страницы или отображения внутри iframe; другими словами, стало проще встраивать Flutter Web внутрь других веб-приложений.

Пример демонстрационной программы доступен по адресу: https://github.com/flutter/samples/tree/main/web_embedding

Поддержка шейдеров

Веб-приложения теперь могут использовать шейдеры Flutter'а fragment shader:

flutter:
  shaders:
    - shaders/myshader.frag

Ядро

Impeller

В стабильной версии 3.7 для iOS была представлена предварительная поддержка Impeller, с тех пор она получила множество отзывов от пользователей.В версии 3.10 мы внедрили более 250 изменений, и теперь мы установили Impeller как по умолчанию используемый рендерер для iOS.

По умолчанию все приложения, созданные для iOS с использованием Flutter 3.10, используют Impeller, что должно привести к меньшей задержке и более стабильному производительству iOS-приложений.

С момента выпуска версии Yöntem 3.7, Impeller для iOS улучшил использование памяти за счет использования меньшего количества каналов рендера и промежуточных целей рендера.

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

Иллюстрация

Например, страница "pull quote" в приложении Wonderous показывает, что эти изменения привели к снижению потребления памяти текущей страницы почти наполовину.

Уменьшение использования памяти также немного снижает нагрузку на GPU и CPU, хотя Wonderous может не регистрировать эти уменьшения нагрузки, поскольку его фреймворк уже был хорошо оптимизирован. Однако это изменение должно увеличить автономность работы устройства. Impeller также предоставил команде возможность быстрее внедрять популярные запросы на новые функции, такие как поддержка более широкого цветового пространства P3 на платформе iOS.> Вклад сообщества ускорил наш прогресс, особенно благодаря пользователям GitHub ColdPaleLight и luckysmg, которые создали несколько патчей, связанных с Импеллером, что повысило верность и производительность.

Хотя Импеллер удовлетворяет большинство требований отрисовки приложений Flutter, вы можете выбрать отключение Импеллера. Если вы решите отказаться от него, пожалуйста, рассмотрите возможность создания проблемы на GitHub, чтобы мы узнали причину.

<key>FLTEnableImpeller</key>
<false/>

Пользователи могут заметить небольшие различия в отрисовке между Skia и Импеллером, эти различия могут быть ошибками, поэтому не создавайте проблем на GitHub, в будущих версиях мы уберём старый рендеринг Skia для iOS, чтобы уменьшить размер Flutter.

Кроме того, вакансный бэкенд Импеллера находится в процессе поддержки, а Импеллер для Android активно развивается, но пока ещё не готов к предварительному просмотру.

Чтобы узнать о продвижении Импеллера, просмотрите [https://github.com/orgs/flutter/projects/21].

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

Версия Yöntem 3.10 включает в себя множество улучшений производительности и исправлений помимо Импеллера.

Устранение заиканияЗдесь стоит поблагодарить luckysmg, который обнаружил, что можно уменьшить время получения следующего слоя для отображения от движка Metal, установив фоновый цвет FlutterViews на значение, отличное от нуля.Эта правка устранила проблему низкой частоты кадров на недавно выпущенных дисплеях iOS со скоростью 120 Гц, что в некоторых случаях увеличивает частоту кадров в три раза, что помогло нам закрыть шесть проблем на GitHub.

Этот шаг был настолько важным, что мы включили его в прошлую версию 3.7.

В стабильной версии 3.7 мы перенесли загрузку локальных изображений с потока платформы на поток Dart, чтобы избежать задержек событий vsync от потока платформы. Однако пользователи заметили, что эта дополнительная работа на потоке Dart также привела к некоторому заиканию.

В версии 3.10 мы перенесли открытие и декодирование локальных изображений с потока Dart на фоновый поток, что устранило возможные длительные паузы на экранах с большим количеством локальных изображений, одновременно избегая задержек событий vsync. В наших локальных тестах и автоматических тестах производительности этот шаг уменьшил время загрузки множества синхронизированных изображений в два раза. Продолжая строить оптимизации поверх нового внутреннего структурного объекта DisplayList в Flutter, мы добавили механизм R-дерева для отсечения в версии 3.10.Этот механизм позволяет более раннюю отмену обработки операций рисования в нашем рендерере. Например, оптимизация ускоряет вывод на экран пользовательского painter, который выходит за его границы.Наши микробенчмарки показывают, что время обработки DisplayList может снизиться до 50%, а приложения со сложной логикой отсечения могут заметить значительное улучшение производительности, степень которого зависит от сложности и количества скрытых операций рисования.

Уменьшение задержек запуска на iOS

Ранее низкая эффективность стратегий поиска идентификаторов приложений увеличивала задержки запуска приложений, причём эти задержки пропорционально зависели от размера приложения.

В версии 3.10 мы устраняем проблему с поиском идентификатора пакета, что снижает задержки запуска больших приложений примерно на 100 миллисекунд или около 30–50%.

Уменьшение размера

Flutter использует SkParagraph как основной библиотеки для работы с текстом, макетами и рендерингом. Ранее мы включали флаг для поддержки перехода на старую библиотеку libtxt и minikin.

Имея полную уверенность в SkParagraph, мы удаляем libtxt и minikin вместе с их флагами в версии 3.10, что уменьшает размер сжатого Flutter на 30 КБ.

Теперь можно быть уверенным.

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

В версии 3.0 мы активировали функцию Android, которая использует продвинутый драйвер GPU для перерисовки меньшей части экрана при изменении одного "грязного" участка.Мы ранее уже внедряли эту оптимизацию на ранних этапах, хотя наши тесты были положительными, возникли две проблемы:

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

При использовании Skia backend эта функция остается включенной на iOS, и мы надеемся, что она будет доступна с помощью Impeller в будущих версиях как показано здесь.

Улучшения API

Декодер APNG

Flutter 3.10 решает один из наших наиболее важных вопросов, добавив возможность декодировать изображения в формате APNG в рамках этого изменения. Теперь можно использовать существующий API загрузки изображений Flutter для загрузки изображений в формате APNG.

Улучшение API загрузки изображений

В Flutter 3.10 был добавлен новый метод instantiateImageCodecWithSize, который поддерживает следующие три условия в этом случае использования:

  • Незвестное соотношение сторон при загрузке
  • Ограничение границами
  • Сохранение оригинального соотношения сторон# Мобильные устройства

iOS

Беспроводное отладочное соединение

Теперь вы можете запускать и выполнять горячую перезагрузку Flutter iOS-приложений через беспроводное соединение.

После успешной пары iOS-устройства через беспроводное соединение в Xcode используйте команду flutter run, чтобы развернуть приложение на устройстве. Если возникли проблемы, проверьте наличие значка сети рядом с устройством в меню Window > Devices and Simulators > Devices.

Дополнительную информацию можно найти здесь.

Поддержка широкого цветового пространства

Flutter-приложения теперь поддерживают точное отображение изображений с широкой цветовой гаммой на iOS. Для использования этой поддержки приложение должно использовать Impeller и добавить флаг FLTEnableWideGamut в файл Info.plist.

Поддержка проверки правописания

Контроллер SpellCheckConfiguration() теперь по умолчанию поддерживает службу проверки правописания Apple на iOS. Можно настроить эту службу с помощью параметров в spellCheckConfiguration для компонента CupertinoTextField.

Пример

Адаптивные флажки и радиокнопки

В Flutter 3.10 были добавлены компоненты CupertinoCheckBox и CupertinoRadio в библиотеку Cupertino. Они создают флажки и радиокнопки, соответствующие стилю Apple.Методы конструктора .adaptive для Material флажков и радиокнопок используют соответствующие компоненты Cupertino на iOS и macOS, а на других платформах — Material компоненты.### Оптимизация анимации, переходов и цветов в CupertinoВ Flutter 3.10 были выполнены улучшения некоторых анимаций, переходов и цветов для обеспечения совместимости с SwiftUI. Эти улучшения включают:

Пример

Улучшение производительности PlatformView

При появлении PlatformViews на экране Flutter ограничивает частоту обновления экрана на iOS для снижения мерцаний. Это может привести к тому, что пользователи заметят это при отображении анимаций или прокруток в приложении.

Поддержка общего кода в плагинах для macOS и iOS

Теперь Flutter поддерживает ключ sharedDarwinSource в файле pubspec.yaml плагинов, который указывает, что Flutter должен использовать общий код для iOS и macOS.

ios: 
  pluginClass:  PathProviderPlugin 
  dartPluginClass:  PathProviderFoundation 
  sharedDarwinSource:  true 
macos: 
  pluginClass:  PathProviderPlugin 
  dartPluginClass:  PathProviderFoundation 
  sharedDarwinSource:  true

Новые ресурсы для расширений приложений

Для Flutter-разработчиков были добавлены документы по использованию расширений приложений iOS, такие как реальные активности, виджеты главного экрана и расширенные возможности обмена данными.

Чтобы упростить создание виджетов главного экрана и обмен данных, мы добавили новые методы в плагины path_provider и homescreen_widget.> Для более подробной информации см.: https://docs.flutter.dev/development/platform-integration/ios/app-extensions

Новые ресурсы для кросс-платформенного дизайна

Эта документация теперь включает рекомендации по кросс-платформенному дизайну для конкретных компонентов UI. Чтобы узнать больше о этих компонентах UI, обратитесь к обсуждению в репозитории Flutter UX GitHub: https://github.com/flutter/uxr/discussions

Для более подробной информации см.: https://docs.flutter.dev/resources/platform-adaptations#ui-components

Android

Поддержка CameraX в Android

Camera X — это библиотека Jetpack, которая упрощает добавление богатых возможностей камеры в Android-приложения.

Эта функция работает со многими типами аппаратуры Android-камер. В версии OnClickListener мы добавили начальную поддержку CameraX в плагин Camera Flutter, эта поддержка охватывает следующие случаи использования:

  • Каптura изображений
  • Запись видео
  • Отображение реального времени превью камеры
Зависимости: 
  camera:  ^0.10.4  # Последняя версия камеры
  camera_android_camerax:  ^0.5.0

Разработочные инструменты

Мы продолжаем совершенствовать DevTools — набор инструментов производительности и отладки для Dart и Flutter. Некоторые ключевые моменты включают:- Интерфейс пользователя DevTools использует Material 3, что делает его более современным и удобным.

  • Консоль DevTools поддерживает оценку выполняющегося приложения во время отладки; до версии 3.10 это было возможно только при остановленном приложении.

  • Встроенный трассировщик Perfetto заменил старый трассировщик временной шкалы.Перфetto может обрабатывать большие наборы данных и работает лучше, чем традиционные трассировщики, например:

  • Возможность закрепления интересующих потоков;

  • Выбор нескольких событий осей времени с помощью щелчков мыши и перетаскивания между несколькими кадрами;

  • Извлечение конкретных данных из событий осей времени с использованием запросов SQL.

Изображение

Устаревшие и значительные изменения

Устаревшие API

Значительные изменения в версии 3.10 включают устаревшие API, которые истекли после выпуска v3.7.

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

Dart Fix может исправить многие из этих проблем, включая быстрое исправление в IDE и использование команды dart fix для применения пакетно.

Обновление Android Studio Flamingo

При обновлении Android Studio до Flamingo вы можете столкнуться с ошибками при попытках выполнить flutter run или flutter build для приложений Flutter для Android.

Эта ошибка возникает потому, что Android Studio Flamingo обновляет связанный с ним Java SDK с версии 11 до 17, что делает невозможной работу предыдущей версии Gradle 7.3 с Java 17.Мы обновили flutter analyze --suggestions, чтобы проверять, происходит ли эта ошибка из-за несовместимости Java SDK и версии Gradle.

Чтобы узнать различные способы решения этой ошибки, просмотрите нашу миграционную гиду: https://docs.flutter.dev/go/android-java-gradle-error.

Устаревание Window singleton

В данной версии устарело использование Window singleton, приложения и библиотек, зависящие от него, должны начать мigrationBuilder. Когда ваше приложение будет поддерживать будущие версии Flutter, это позволит сделать ваше приложение готовым к работе с многими окнами.

PS: Обратите внимание на новую мини-игру, основанную на Flutter: I/O FLIP мини-игра

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