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

OSCHINA-MIRROR/CarGuo-GSYFlutterBook

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

Выпуск Flutter 3.16, давайте посмотрим, что нового!

Исходная статья: https://medium.com/flutter/whats-new-in-flutter-3-16-dba6cb1015d1

Flutter снова представил новую версию, вместе с ней вышел Dart 3.2. В этом выпуске 3.16 Material 3 становится новым основным тематическим оформлением, а также Android получил предварительную поддержку Impeller. Кроме того, был представлен значительный обновленный набор инструментов для создания простых игр в Flutter.

Особое внимание заслуживает поддержка Impeller для Android.

Основной фреймворк

По умолчанию используется Material 3

С версии bk. 3.16 значение параметра useMaterial3 в конструкторе MaterialApp по умолчанию установлено как true. Если вам все ещё требуется использовать Material 2, вы можете явно указать useMaterial3: false, чтобы воспользоваться старыми темами. Однако следует отметить, что связанные с Material 2 компоненты будут в будущем отключены и удалены.

Кроме того, некоторые виджеты в Material 3 могут не совместимы со всеми возможностями Material 2, поэтому после перехода на версию 3.16 вам может потребоваться выполнить миграцию некоторых UI-компонентов вручную, например, для изменения внешнего вида NavigationBar.

Дополнительные вопросы по миграции можно найти здесь: https://github.com/flutter/flutter/issues/91605. Также вы можете сравнить различия между двумя темами на странице: https://flutter.github.io/samples/material_3.html.Основные цветовые схемы и шрифты в Material 3 определяются через свойства ThemeData.colorScheme и ThemeData.textTheme. Для создания цветовых схем Material 3 рекомендуется использовать метод ColorScheme.fromSeed(), а также есть возможность получить цветовую схему изображения через ColorScheme.fromImageProvider.

Учитывая текущее положение дел, настоятельно рекомендуется начать процесс адаптации.

Пример использования Material 3

Другие улучшения в области движения в Material 3 включают добавление классов Easing и Durations. Кривые из Material 2 были переименованы и теперь содержат предупреждение "legacy", что указывает на то, что они в конечном итоге будут отключены и удалены. (#129942)

Проще говоря, был создан новый модуль motion.dart, который заменил старый [curves.dart#L26](https://github.com/flutter/flutter/blob/main/packages/flutter/lib/src/material/curves.dart#L26).

Пример использования новых кривых

Пример использования Easing

Пример использования Durations

Добавление дополнительных опций в меню редактирования

На iOS теперь пользователи могут выбирать текст и запускать контекстное меню с множеством стандартных услуг. В версии 3.16 были добавлены опции поиска, совместной работы и других функций.Пример

Добавление TextScaler

Для поддержки функции нелинейного масштабирования шрифтов в Android 14, который помогает людям со слабым зрением, новый класс TextScaler заменил свойство Text.textScaleFactor. (#128522)

Обновление SelectionArea

Компонент SelectionArea теперь поддерживает нажатие мыши, двойное нажатие и долгое нажатие на устройствах с сенсорным экраном. По умолчанию эти новые жесты поддерживаются через компоненты SelectionArea и SelectableRegion:

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

Пример

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

Пример

Меню действий для управления фокусом виджета

С версии 3.16 добавлена возможность очистки изменений фокуса при использовании пункта меню: метод applyFocusChangesIfNeeded класса FocusManager теперь поддерживает восстановление фокуса меню. Когда пользователь выбирает пункт меню, фокус возвращается к элементу, который имел фокус до открытия меню. (#130536)Пример

Автоматическое переупорядочивание сочетаний клавиш в меню на iOS и macOS

Приложения Flutter на платформе Mac теперь могут автоматически упорядочивать сочетания клавиш в меню в соответствии с рекомендациями Apple Human Interface Guidelines. (#129309)

Пример

Анимация MatrixTransition

Новый компонент MatrixTransition позволяет выполнять матричные преобразования при создании анимационных переходов. На основе текущего значения анимации можно применять матричные преобразования к дочернему виджету. (#131084)

class MatrixTransitionExampleApp extends StatelessWidget {
  const MatrixTransitionExampleApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: MatrixTransitionExample(),
    );
  }
}

class MatrixTransitionExample extends StatefulWidget {
  const MatrixTransitionExample({super.key});

  @override
  State<MatrixTransitionExample> createState() => _MatrixTransitionExampleState();
}

class _MatrixTransitionExampleState extends State<MatrixTransitionExample> with TickerProviderStateMixin {
  late AnimationController _controller;
  late Animation<double> _animation;

  @override
  void initState() {
    super.initState();
    _controller = AnimationController(
      duration: const Duration(seconds: 2),
      vsync: this,
    )..repeat();
    _animation = CurvedAnimation(
      parent: _controller,
      curve: Curves.linear,
    );
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }
}
``````dart
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: MatrixTransition(
          animation: _animation,
          child: const Padding(
            padding: EdgeInsets.all(8.0),
            child: FlutterLogo(size: 150.0),
          ),
          onTransform: (double value) {
            return Matrix4.identity()
              ..setEntry(3, 2, 0.004)
              ..rotateY(pi * 2.0 * value);
          },
        ),
      ),
    );
  }
}

Добавлен класс PaintPattern в flutter_test

В пакете flutter_test, новый класс PaintPattern позволяет разработчикам проверять вызовы отрисовки на холсте для виджетов CustomPainter и Decoration (в юнит-тестах).

Ранее требовалось создание отдельного файла для проверки правильной раскраски и формы прямоугольников, но теперь можно использовать PaintPattern. Например, следующий пример проверяет, что MyWidget рисует круг на холсте:

expect(
  find.byType(MyWidget),
  paints
    ..circle(
      x: 10,
      y: 10,
      radius: 20,
      color: const Color(0xFFF44336),
    ),
);
// Несколько вызовов отрисовки также могут быть цепочками.
expect(
  find.byType(MyWidget),
  paints
    ..circle(
      x: 10,
      y: 10,
      radius: 20,
      color: const Color(0xFFF44336),
    ),
    ..image(
      image: MyImage,
      x: 20,
      y: 20,
    ),
);
```## Поддержка прокрутки в два измерения

После того как основные возможности двумерной прокрутки были представлены в Flutter 3.13, версия 3.16 добавила больше функциональности и улучшений. Теперь 2D Foundation поддерживает виджет KeepAlive, а также предоставляет по умолчанию режим последовательного фокуса и скрытую прокрутку.

Незадолго до выпуска Flutter 3.13 был выпущен пакет [two_Dimension_scrollables](https://pub.dev/packages/two_dimensional_scrollables), который поддерживается командой Flutter и содержит первый виджет 2D прокрутки, построенный на основе этого фреймворка — TableView. В него уже добавлено множество возможностей декора и стилирования, а также исправлены различные ошибки.
```# Ядро

## Impeller для Android

В версии 3.16 Impeller для Android предлагает предварительный просмотр в стабильной версии, которая включает информацию о поддерживаемых характеристиках Impeller на устройствах с поддержкой Vulkan.

![Изображение](http://img.cdn.guoshuyu.cn/2bkz.png)

> График демонстрирует улучшение производительности тестовых бенчмарков Flutter Gallery, запущенных на импеллере с использованием Vulkan-backend за последние 12 месяцев. Пользователи отметят меньшее количество подвисаний и более высокий стабильный FPS.

На данный момент Impeller работает плохо на устройствах без поддержки Vulkan, однако в течение следующих нескольких месяцев будет продолжена работа над усовершенствованием его OpenGL-backend.

Разработчики Flutter могут сейчас попробовать Impeller на устройствах Android с поддержкой Vulkan, передав флаг `--enable-impeller` команде `flutter run`, либо добавив следующие настройки в файл `AndroidManifest.xml` внутри тега `<application>`:

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

Обычно Impeller использует Vulkan на устройствах с операционной системой 64-битного типа, поддерживающих Android API 29 или выше.

Существуют известные проблемы с Android Vulkan Preview:

  • Поддержка platform view пока недоступна, что может негативно влиять на производительность таких фреймворков.
  • Настраиваемые шейдеры ещё не реализованы.Учитывая большую вариацию аппаратного обеспечения в экосистеме Android, можно ожидать, что период предварительного просмотра для Android будет длиннее, чем для iOS. Кроме того, дополнительные отладочные функции, активируемые при сборке "в режиме отладки", используются сверх Skia, что создаёт дополнительные затраты времени выполнения. Поэтому отзывы о производительности Impeller лучше получать из профилей или релизов.

Производительность, точность и стабильность Impeller

В версии Yöntemler 3.16 были сделаны несколько улучшений производительности текста в Impeller, что применимо как для Android, так и для iOS. В частности, улучшены методы управления шрифтами Impeller, а также способы распределения нагрузки текста между потоками UI и растрового отрисовщика в движке. Поэтому пользователи 3.16 заметят снижение подвисаний в задачах, связанных с большим количеством текста.

График показывает снижение среднего времени глификации кадра при проведении текстоинтенсивной бенчмаркинговой процедуры на iPhone 11 с использованием Impeller (в миллисекундах).

В версии 3.16 было выполнено 209 обязательств, связанных с Impeller в хранилище flutter/engine, что позволило решить 217 проблем, включая 42 проблемы, связанные с отчётами пользователей о точности, стабильности или производительности.


Исправлено:

  • "Yöntemler" заменено на "методы".
  • Удалена лишняя буква "ь" после слова "обязательств".## Производительность Engine

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

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

Накладка производительности Impeller

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

Корректное отображение дефектов графикиВ версии 3.16 свойство Paint.enableDithering по умолчанию установлено в значение true, а конфигурирование разработчиками больше недоступно. До этого момента переходы цветов на всех устройствах имели множество полос, и они выглядели странно при использовании некоторых анимаций. Решением стало использование непрозрачных переходов цветов и алгоритма дижтинга Skia.> Для упрощения процесса миграции, Impeller никогда не будет поддерживать дижтинг для чего-либо кроме градиентов.

Должно быть:

Для упрощения процесса миграции, Impeller никогда не будет поддерживать джиттинги для чего-либо кроме градиентов.

  • До версии 3.16

  • После версии 3.16

Игры

Инструментарий для игр Flutter

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

  • Продукт компании Etermax — Trivia Crack
  • Продукт компании Lotum — 4 Pics 1 Word (словообразовательная игра)
  • Продукт компании Dong Digital — Brick Mania (аркадная игра)
  • Продукт компании Onrizon — StopotS (тип игры)
  • Продукт Flutter for I/O — вintage pinball game
  • PUBG мобильная версия использует Flutter в социальных и меню экранах
  • ····

Для помощи игровым разработчикам в повышении производительности работы сегодня Flutter выпустил крупное обновление пакета инструментов для создания игр-развлечений. Это набор новых ресурсов, который помогает разработчикам переходить от концепций к выпуску более специализированных шаблонов игр, таких как карточные игры, бесконечные бегающие игры, а также интеграцию услуг Google Play, покупок внутри приложения, рекламы, достижений, Crashlytics и поддержки многопользовательских игр.

Для получения дополнительной информации можно посетить https://medium.com/flutter/building-your-next-casual-game-with-flutter-716ef457e440

Веб

Отслеживание событий временной шкалы Flutter в DevTools Chrome

События временной шкалы Flutter теперь отображаются в панели производительности DevTools Chrome. (#130132)

Андроид

Поддержка колесика мыши

Чтобы адаптироваться к использованию мыши на планшетах или складывающихся устройствах, версия 3.16 Flutter поддерживает синхронизацию скорости прокрутки колесика мыши с скоростью прокрутки на устройствах Android. (44724)

Прогностическая навигация назад

Версия Android 14 включает функцию прогностической навигации назад, которая была реализована в обновлении Flutter 3.16.```dart PopScope( canPop: _myCondition, child: ... ),

PopScope( canPop: true, onPopInvoked: (bool didPop) { _myHandleOnPopMethod(); }, child: ... ),

NavigatorPopHandler( onPop: () => _nestedNavigatorKey.currentState!.pop(), child: Navigator( key: _nestedNavigatorKey, … ), )


![](http://img.cdn.guoshuyu.cn/20231116_Flutter316/image20.gif)

# iOS

## Расширения приложений

Flutter теперь поддерживает некоторые [расширения приложений iOS](https://developer.apple.com/app-extensions/), что позволяет использовать Flutter Widgets для отображения UI для некоторых типов расширений iOS. Однако это не применимо ко всем типам расширений, поскольку могут существовать ограничения по API (например, пространство главного экрана) или памяти.

![](http://img.cdn.guoshuyu.cn/20231116_Flutter316/image21.png)

Из-за ограничений по памяти расширений рекомендуется использовать Flutter для создания UI расширений только для типов расширений, где ограничение по памяти больше 100 МБ.

Кроме того, Flutter использует дополнительную память в режиме отладки, поэтому использование Flutter для создания расширений UI на реальных устройствах в режиме отладки не полностью поддерживается.> Подробнее см.: https://docs.flutter.dev/platform-integration/ios/app-extensions



# Экосистема

Сейчас [Flutter Favorites](https://docs.flutter.dev/packages-and-plugins/favorites) возобновил свою работу, и в этом цикле Комитет экосистемы Flutter отметил как новые Flutter Favorites пакеты [Flame](https://pub.dev/packages/flame), [flutter_animate](https://pub.dev/packages/flutter_animate), [flutter_rust_bridge](https://pub.dev/packages/flutter_rust_bridge), [Riverpod](https://pub.dev/packages/riverpod), [video_player](https://pub.dev/packages/video_player), [macos_ui](https://pub.dev/packages/macos_ui) и [fpdart](https://pub.dev/packages/fpdart).## Улучшения Camera X

В стабильной версии 3.10 Flutter плагин камеры был расширен поддержкой Camera X, что решило многие проблемы, существовавшие в реализации Camera 2.

```yaml
dependencies: 
 camera: ^0.10.4 
 camera_android_camerax: ^0.5.0

Видеопроигрыватель для macOS

Пакет video_player теперь поддерживает macOS.

Разработка

Расширение DevTools

Новое расширение DevTools позволяет:

  • Авторам пакетов создавать специализированные инструменты для отображения непосредственно в DevTools.
  • Разработчикам пакетов использовать мощные инструменты, используя существующие фреймворки и утилиты DevTools.
  • Разработчикам Dart и Flutter использовать DevTools для отладки приложений с доступом к специализированным инструментам, зависящим от зависимостей приложения и предоставляемых ими расширений DevTools.

Благодаря авторам пакетов Provider, Drift и Patrol, этот экосистемный подход уже реализован, и вы можете использовать расширения DevTools этих пакетов!

Обновление DevTools

Некоторыми особенностями этого выпуска DevTools являются:- Добавлена поддержка расширений DevTools

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

  • Общую производительность

  • Устойчивость горячего перезапуска

  • Действия выбора и копирования текста

  • Улучшение просмотра сетевых анализов

Открытое API интерфейса VS Code

Спасибо члену сообщества Flutter DanTup, расширение Flutter для VS Code теперь имеет боковую панель Flutter, которая позволяет легко получить доступ к:

  • Открытию экранов Flutter DevTools
  • Визуализации активных сессий отладки
  • Просмотру доступных устройств
  • Созданию нового проекта
  • Горячему перезапуску и перезапуску
  • Выполнению команды flutter doctor -v
  • ...

Последнее слово

Эта версия обновления является относительно скромной. Самое значительное изменение — это использование темы Material You по умолчанию и технологии Android Impeller. Остальные изменения не оказывают большого влияния. Тема Material You рекомендуется к использованию как можно скорее, так как компоненты старой темы будут постепенно исключаться.Кроме того, видно, что основные усилия по обновлению сосредоточены на Android и iOS. Частота обновлений для Windows кажется замедленной после некоторых изменений? Также отсутствие упоминаний об обновлении плагинов для JetBrains свидетельствует о том, что основные ресурсы были направлены на развитие VS Code. Можно сказать, что стоит ценим то, что имеем.Итак, смелый юноша, начните пробовать новые возможности.

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