Оригинальная статья доступна по ссылке https://medium.com/flutter/whats-new-in-flutter-2-5-6f080c3f3dc
Flutter 2.5 — второй по величине обновляемый выпуск в истории проекта Flutter, который:
За прошедший год можно отметить работу 1337 участников, создавших 21 072 pull request, из которых 15 172 были приняты.
На самом деле этот выпуск продолжает улучшать производительность и средства разработки, а также добавляет множество новых возможностей, включая:
Первый pull request #25644 предназначен для предварительной компиляции шейдеров Metal для офлайн-обучения, что, согласно бенчмаркам, снижает время глификации худшего случая на две трети секунды и уменьшает 99-й процентиль кадров вдвое.Однако предварительная компиляция шейдеров является лишь одним источником замедления, поскольку обработка асинхронных событий, полученных из сети, файловой системы, плагинов или других isolates, может прерывать анимацию, что является другим источником замедления.
Поэтому pull request #25789 улучшил стратегию планирования, так что в этом выпуске цикл событий UI-isolate теперь обрабатывает кадры до выполнения других асинхронных задач, что позволяет избежать таких замедлений в тестах.
Еще один фактор, вызывающий замедление, это пауза потока UI сборщиком мусора (GC) для освобождения памяти.Ранее некоторые изображения могли задерживать освобождение памяти при выполнении сборки мусора (GC) в Dart VM. Для решения этой проблемы в ранних версиях движка Flutter использовались подсказки GC Dart VM для указания, что память изображений может быть освобождена, что теоретически должно обеспечить более своевременную очистку памяти. К сожалению, это также привело к избыточному количеству сборок мусора (GC), а иногда и к недостаточной скорости освобождения памяти для предотвращения ситуаций низкого уровня памяти на устройствах с ограниченным объемом памяти. В этом выпуске память, используемая неиспользуемыми изображениями, освобождается немедленно (#26219, #82883, #84740), что значительно снижает количество операций GC. Пример в тестовом сценарии показывает, что воспроизведение 20-секундной анимации GIF требовало более 400 сборок мусора (GC), но теперь требуется всего 4 сборки мусора. Уменьшение количества основных сборок мусора означает, что анимация, связанная со скрытием и появлением изображений, будет иметь меньше задержек и потреблять меньше процессорных мощностей.Еще одно улучшение производительности в Flutter 2.5 заключается в уменьшении задержки при отправке сообщений между Dart и Objective-C/Swift (iOS) или Dart и Java/Kotlin (Android).
Обычно как часть настройки каналов сообщений, удаление ненужных копий из декодера сообщений может уменьшить задержку до 50%, конечно, это зависит от размера сообщения и устройства (#25988, #26331).
Вы можете получить больше информации о производительности платформенных каналов здесь: https://medium.com/flutter/improving-platform-channel-performance-in-flutter-e5b4e5df04af
Эта версия Flutter выпущена вместе с Dart 2.14.
Новый выпуск Dart представляет новые возможности форматирования, делающие цепочку операторов более понятными, а также новую поддержку игнорирования файлов в pub и новые языковые возможности, такие как восстановление тройного логического умножения.
Кроме того, Dart 2.14 представляет собой набор стандартных правил проверки кода, которые используются сразу после создания новых проектов Dart и Flutter.Разработчики получают эти правила проверки кода не только при создании нового проекта Dart или Flutter, но также могут легко добавить аналогичный анализ в существующие приложения за несколько шагов.> Инструкция по переходу к новым правилам проверки кода: https://flutter.dev/docs/release/breaking-changes/flutter-lints-package#migration-guide
Подробнее о этих правилах проверки кода, новых языковых возможностях и прочее можно найти здесь: https://medium.com/dartlang/announcing-dart-2-13-c6d547b57067
С исправлений начиная с #81303, мы устраняем ряд проблем связанных с полноэкранной работой на Android. Эти изменения также добавили возможность прослушивания изменений полноэкранного режима в других режимах. Например, когда пользователь взаимодействует с приложением и система возвращает системное меню UI, разработчики теперь могут писать код, который выполняется при полной загрузке экрана.
Новый режим полноэкранного отображения Android: обычный режим (слева), режим border-to-border (в центре), режим border-to-border с пользовательским стилем SystemUIOverlayStyle (справа)
В этом выпуске мы добавили поддержку новых норм Material You (также известных как v3), включая обновление размера и темы для кнопок действий ( #86441), а также новый состояния MaterialState.scrolledUnder
, которое можно проверить с помощью примеров кода в демо ( #79999).
Новое состояние MaterialState.scrolledUnder.
Ещё одно улучшение заключается в том, что были добавлены уведомления метрик прокрутки ( #85221, #85499). Они предоставляют уведомления о прокручиваемых областях даже если пользователь не производил прокрутку, например, следующий ListView
может правильно показывать или скрывать полосу прокрутки в зависимости от базового размера:
В данном случае нет необходимости писать код, но если вы хотите захватить изменения ScrollMetricNotification
, это можно сделать через этот слушатель.
Отдельное спасибо сообществу за вклад xu-baoolin, который внёс значительный вклад и предложил отличное решение.
Ещё один замечательный вклад со стороны сообщества — это возможность использования ScaffoldMessenger
. Вы могли помнить, что с Flutter 2.0 ScaffoldMessenger
был представлен как более мощный способ отображения SnackBar
, которые предоставляют пользователям уведомления в нижней части экрана. В Flutter 2.5 теперь можно добавить баннер в верхнюю часть Scaffold, который будет оставаться видимым до тех пор, пока пользователь его не закроет.
Приложение может получить такое поведение, вызывая метод
showMaterialBanner
у объекта ScaffoldMessenger
:
class HomePage extends StatelessWidget {
const HomePage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) => Scaffold(
appBar: AppBar(
title: const Text('Материал баннер находится ниже'),
),
body: Center(
child: ElevatedButton(
child: const Text('Показать MaterialBanner'),
onPressed: () => ScaffoldMessenger.of(context).showMaterialBanner(
MaterialBanner(
content: const Text('Привет, я являюсь Material Banner'),
leading: const Icon(Icons.info),
backgroundColor: Colors.yellow,
actions: [
TextButton(
child: const Text('Закрыть'),
onPressed: () => ScaffoldMessenger.of(context)
.hideCurrentMaterialBanner(),
),
],
),
),
),
),
);
}
Material справочник указывает, что приложения должны показывать баннер одновременно только один. Поэтому, если вы вызываете метод showMaterialBanner
несколько раз, ScaffoldMessenger
будет поддерживать очередь, и новый баннер будет показан после того, как предыдущий был закрыт.
Благодарим Calamity210 за отличное дополнение в поддержку Material в Flutter!
В этом выпуске мы добавили возможность переопределения быстрых клавиш редактирования текста #85381, что является продолжением работы над Flutter Yöntem 2.0 и его новыми возможностями редактирования текста, такими как выбор текста и возможность прекращения распространения событий после их обработки.> Если вы хотите, чтобы Ctrl-A выполняло некоторое пользовательское действие вместо выбора всего текста.
Класс DefaultTextEditingShortcuts
содержит список поддерживаемых горячих клавиш на каждой платформе; если разработчики хотят переопределить что-либо, они могут использовать существующий Shortcuts
Flutter для переотображения любого горячего клавишного сочетания на существующие или пользовательски созданные намерения.
Документация API: https://api.flutter.dev/flutter/widgets/DefaultTextEditingShortcuts-class.html
Эта работа улучшила функциональность и надёжность плагина image_picker
для Android.
Кроме того, вы заметите ранние версии плагина камеры, предназначенного для поддержки веба ( #4151 ).
Этот превью предоставляет базовую поддержку просмотра камеры в вебе, фотографирования, использования вспышки и управления масштабом. В настоящее время это ещё не является утвержденным плагином, поэтому вам потребуется явно добавить его чтобы использовать его в вебе.
Подробнее: https://pub.dev/packages/camera_web/install
В этом выпуске Flutter каждому соответствующему плагину теперь предлагается аналогичный рекомендательный плагин, такой как batteri:
Пояснение: исправлено написание "плугин" на "плагин".Кроме того, поскольку эти плагины больше не поддерживаются активно, они больше не считаются любимыми плагинами Flutter, и мы рекомендуем использовать следующие версии этих плагинов:
Сначала стоит отметить увеличенную поддержку DevTools для использования обновленной версии движка ( #26205 , #26233 , #26237 , #26970 , #27074 , #26617).
Одна из групп обновлений позволяет Flutter лучше связывать события отслеживания с конкретными частями фреймворка, что помогает разработчикам понять причины, по которым фреймворк может выходить за рамки бюджета. Это можно заметить в диаграмме DevTools Frames, которая была перестроена как "реальное время" и может заполняться событиями при отображении приложения; выбрав событие в этой диаграмме, вы можете навигировать до события временной шкалы этого кадра:
Flutter движок теперь также распознает события компиляции шейдеров в ленте времени, а Flutter DevTools используют эти события для помощи в диагностике замедлений приложения во время компиляции шейдеров.
С помощью этой новой функции DevTools могут обнаруживать моменты, когда кадры теряются из-за замедлений при компиляции шейдеров, чтобы проблема могла быть решена.
При использовании команды flutter run
вместе с флагом --purge-persistent-cache
, это очистит кэш, чтобы гарантировать воспроизведение окружения, которое пользователи видят при первом запуске или повторном открытии (iOS).
Эта функция все еще находится в разработке, если возникнут какие-либо проблемы, вы можете обратиться по адресу: https://b.corp.google.com/issues/new?component=775375&template=1369639
Кроме того, при отслеживании проблем производительности процессора, вы можете столкнуться с перегрузкой данных анализа из библиотек Dart и Flutter или из корневого кода движка. Если вы хотите отключить любой из этих источников, чтобы сосредоточиться на своем собственном коде, вы можете использовать новую функцию профилировщика ЦП #3236, которая позволяет скрывать информацию анализатора из этих источников.
Для любых категорий, которые не были отфильтрованы, они теперь закодированы цветами (#3310, #3324), что делает легким просмотр частей системы, представленных в диаграмме CPU frames.
Цветная диаграмма кадров используется для идентификации активности кода приложения, нативного кода, кода Dart и Flutter.
Производительность не является единственным фактором отладки; версия DevTools включает обновление инспектора виджетов, позволяющее оценивать объекты, свойства представлений, состояние виджетов и т.д., просто наведя указатель мыши на виджет.
А при выборе одного из виджетов он автоматически заполняется в новой консоли инспектора виджетов, где вы можете просматривать его свойства.
Приостановка выполнения в точке останова также позволяет вычислять выражения из консоли
Кроме новых возможностей, инспектор виджетов был обновлен, чтобы сделать DevTools более полезными для понимания и отладки приложений Flutter. Для этого мы сотрудничаем с финской компанией по технологиям Codemate.
На этом скриншоте можно заметить следующие изменения:
Лучшая передача информации о кнопках переключения отладки — эти кнопки имеют новые значки, ориентированные на задачу метки и богатые подсказки, описывающие их функционал и когда следует использовать каждую из них. Каждая подсказка дополнительно связана со страницей подробной документации по данной функции.- Упрощение просмотра и поиска интересующих виджетов — часто используемые виджеты в фреймворке Flutter теперь отображаются с помощью значков слева в дереве виджетов. Они расцвечены по категориям, например, виджеты макета показываются синим цветом, а контентные виджеты — зелёным. Кроме того, каждый текстовый виджет теперь отображает предварительный просмотр своего содержимого.
Соответствие цветовой схемы менеджера макетов и дерева виджетов — теперь проще идентифицировать активный виджет как в менеджере макетов, так и в дереве виджетов. Например, виджет "Столбец" на скриншоте имеет синий фон в менеджере макетов и синий значок в дереве виджетов.
Интеграционные тесты могут выполняться с помощью плагина Flutter для IntelliJ / Android Studio в этой версии. Это возможность запускать интеграционные тесты (#5459).
Интеграционные тесты представляют собой тестирование всего приложения на устройстве, расположенные в директории integration_test
, они используют ту же функциональность, что и единичные тесты testWidgets()
.
Чтобы добавить интеграционные тесты в проект, следуйте инструкциям на сайте flutter.dev. Чтобы подключить тест к IntelliJ или Android Studio, создайте конфигурацию запуска для интеграционных тестов и подключите устройство для тестирования. Конфигурация запуска позволяет разработчику выполнять тесты, включая установку точек останова и шагов по коду.Кроме того, последний плагин Flutter для IntelliJ / AS позволяет просматривать информацию о покрытии тестами для одиночных и интеграционных тестов. Эта информация доступна через кнопку рядом с кнопкой "Отладка":
Информация о покрытии отображается в боковой панели редактора красными и зелеными полосами. В этом примере строки с 9 по 13 были протестированы, но строки 3 и 4 — нет.
Новая версия также включает новую функцию предварительного просмотра значков из пакетов pub.dev, используемых приложениями, созданными на основе файлов шрифтов TrueType (#5504, #5595, #5677, #5704). Эта функция работает аналогично предварительному просмотру значков Material и Cupertino.
Чтобы включить предварительный просмотр значков, вам нужно указать плагин, какие пакеты вы используете; в настройках/предпочтениях появилось новое текстовое поле:
Обратите внимание, что, как показывает пример кода на скриншоте, эта настройка применима только к значкам, определенным как статические константы внутри класса, она не применима к выражениям, таким как LineIcons.addressBook()
или LineIcons.values['code']
.## Visual Studio Code: зависимости, Fix All и Test Runner
Плагин Flutter для Visual Studio Code также был улучшен в этой версии двумя новыми командами "Dart: Add Dependency" и "Dart: Add Dev Dependency" (#3306, #3474).
Эти команды предоставляют функциональность, аналогичную плагину Pubspec Assist Jeroen Meijer (плагин Pubspec Assist Jeroen Meijer); новые команды работают сразу после установки и предлагают список типов пакетов, регулярно получаемых с pub.dev.
Разработчики могут заинтересовать команда "Fix All", применяемая к Dart-файлам (#3445, #3469), которая позволяет исправить все проблемы, аналогичные тем, которые можно исправить с помощью dart fix (dart fix).
Это также можно настроить через добавление source.fixAll
в editor.codeActionsOnSave
в конфигурации VS Code для автоматического выполнения при сохранении, либо если вы хотите попробовать функцию предварительного просмотра, то можете активировать этот dart.previewVsCodeTestRunner
параметр и проверить запущенные Dart и Flutter тесты с помощью нового тестового запуска Visual Studio Code.
Тестовый запуск Visual Studio Code немного отличается от текущих Dart и Flutter тестовых запусков и будет хранить результаты между сессиями. В тестовом запуске Visual Studio Code также добавлены новые значки в боковой панели, показывающие последнее состояние тестов; эти значки можно щелкнуть, чтобы запустить тест (или правый клик мыши для контекстного меню).
В предстоящем выпуске существующие Dart и Flutter тестовые запуски будут удалены, чтобы поддержать новый тестовый запуск Visual Studio Code.
В этом выпуске отладчик теперь может корректно прерывать выполнение на нераспознанных исключениях, которые ранее были захвачены фреймворком ( #17007 ).
Это улучшает опыт отладки, поскольку отладчик теперь может указывать конкретную строку кода, где исключение было выброшено, а не случайную строку глубоко внутри фреймворка.
Новое связанное с этим функциональное свойство позволяет разработчику решать, следует ли FutureBuilder перехватывать или глотать ошибки (#84308), что должно предоставить множество дополнительных случаев исключений, помогающих отслеживать проблемы в Flutter-приложениях.
С момента создания Flutter существует шаблон приложения "Counter", который имеет много преимуществ:
Однако этот шаблон не предлагал особенно хорошого старта для Flutter-приложений. В этом выпуске представлен новый шаблон ( #83530 ):``` $ flutter create -t skeleton my_app

Шаблон "skeleton" создаёт двухстраничный список, следуя лучшим практикам сообщества. Разработка этого шаблона была проверена как внутренними, так и внешними экспертами, что обеспечивает более надёжную основу для создания приложений высокого качества и поддерживает следующие функции:
- Использует `ChangeNotifier` для координации нескольких виджетов;
- По умолчанию использует `arb`-файлы для локализации;
- Включает примеры изображений и создаёт папки для изображений с масштабами 1x, 2x и 3x;
- Использует организацию файлов "функциональность в первую очередь";
- Поддерживает общие предпочтения;
- Поддерживает светлую и тёмную темы;
- Поддерживает навигацию между несколькими страницами.
При дальнейшем развитии лучших практик для Flutter можно ожидать, что этот новый шаблон будет продолжать развиваться.
С другой стороны, **если вы работаете над созданием плагина, а не приложения, то вам может заинтересовать версию 1.0 Pigeon**.
Pigeon — это инструмент генерации кода, который используется для создания типобезопасных интерфейсов взаимодействия между Flutter и его хостовой платформой. Он позволяет определять описание API плагинов и генерировать фреймворк кода для Dart, Java и Objective-C (который также может использоваться для Kotlin и Swift).
Команда Flutter использует Pigeon в некоторых своих плагинах, и в этой версии он предоставляет более полезные сообщения об ошибках, поддерживает generics, примитивные данные как параметры и типы возврата, а также несколько параметров. Ожидается, что разработчики будут использовать его чаще в будущем.
## Важные изменения и отмененные возможности
Вот основные изменения в Flutter 2.5:
- [По умолчанию используется поведение прокрутки с поддержкой нажатий](https://flutter.dev/docs/release/breaking-changes/default-scroll-behavior-drag)
- [Удалены废弃的API в версии 2.2 и последующих](https://flutter.dev/docs/release/breaking-changes/2-2-deprecations)
- [Добавлен пакет flutter_lints](https://flutter.dev/docs/release/breaking-changes/flutter-lints-package)
- [Отменено свойство accent в ThemeData](https://flutter.dev/docs/release/breaking-changes/theme-data-accent-properties)
- [Очистка GestureRecognizer](https://flutter.dev/docs/release/breaking-changes/gesture-recognizer-add-allowed-pointer)
- [Замена AnimationSheetBuilder.display на collate](https://flutter.dev/docs/release/breaking-changes/animation-sheet-builder-display)
- [Введены платформенные представления с использованием HTML слотов](https://flutter.dev/docs/release/breaking-changes/platform-views-using-html-slots-web)
- [Перенос LogicalKeySet на SingleActivator](https://github.com/flutter/flutter/pull/80756)
При продолжении обновления Flutter Fix (доступен в вашем IDE и через команду `dart fix`) общее количество правил автоматического перехода составляет 157 для кода, затронутого этими или любыми другими важными изменениями и отмененными возможностями.Кроме того, с выпуском Flutter 2.5 мы **будем отключать поддержку iOS 8**, объявленную для отказа в сентябре 2020 года. Отказ от поддержки iOS 8, которая занимает менее 1% рынка устройств, позволит команде Flutter сосредоточиться на новых платформах широкого использования. Отключение поддержки означает, что эти платформы могут работать, но мы не будем тестировать новые версии Flutter или плагины на этих платформах. Вы можете просмотреть текущий список поддерживаемых платформ Flutter на flutter.dev: https://flutter.dev/docs/development/tools/sdk/release-notes/supported-platforms
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )