Что нового во Flutter 2.8

Что нового во Flutter 2.8

Выпуск Flutter 2.8 — это последнее в 2021 году обновление для массового кросс-платформенного пакета разработки приложений Google, поставляется с автоматическим повышением производительности и новыми функциями для языка Dart и представляет собой кропотливую работу 207 участников и 178 рецензентов, в результате чего было объединено 2424 PR и закрыто 2976 проблем.

Коллективная работа сообщества разработчиков фреймворка привела к значительным улучшениям производительности как в движке, так и во Flutter DevTools, стабильном выпуске Google Mobile Ads SDK для Flutter, множестве новых функций и улучшений Firebase, WebView 3.0, новой партии пакетов Flutter Favorite, множество обновлений для настольных компьютеров на пути к стабильной версии, а также новая версия DartPad с поддержкой большего количества пакетов, включая саму Firebase.

Если у вас еще не было возможности опробовать его, Flutter — это способ создавать приложения для Android, iOS, Windows, macOS, Linux, Интернета и других, используя один и тот же код. С момента запуска «Flutter 2» в начале этого года проект продемонстрировал невероятный рост, поскольку Google цитирует 375 000 приложений Flutter в Play Store, почти половина из которых была запущена с мая.

Запуск Flutter приложений

В этом выпуске улучшена задержка запуска приложений. Тестирование этих улучшений на Google Pay, большом популярном приложении с более чем 1 миллионом строк кода, чтобы убедиться, что эти изменения приведут к ощутимым последствиям в реальном мире. Все вместе эти улучшения привели к сокращению задержки запуска Google Pay на 50% при работе на устройстве Android низкого уровня и на 10% к улучшению на устройствах высокого класса.

Улучшения в том, как Flutter влияет на политику сбора мусора виртуальной машины Dart, теперь помогает избежать несвоевременных циклов сборки мусора во время запуска приложения. Например, до того, как первый кадр будет отрисован на Android, Flutter теперь только уведомляет виртуальную машину Dart о нехватке памяти для сигналов TRIM_LEVEL_RUNNING_CRITICAL и выше . При локальном тестировании это изменение сократило время до первого кадра до 300 мс на устройстве низкого уровня.

Из-за большой осторожности в предыдущих выпусках Flutter блокировал поток платформы при создании представлений платформы. Тщательные рассуждения и тестирование определили, что некоторая часть сериализации может быть удалена, что устраняет блокировку > 100 мс во время запуска Google Pay на устройстве низкого уровня.

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

Объем памяти

Разработчики Flutter, нацеленные на устройства с ограниченным объемом памяти , испытывали проблемы с отслеживанием производительности из-за того, что Flutter нетерпеливо загружал «изолятор службы» виртуальной машины Dart, код AOT которой был связан с приложением, так что Flutter считывал оба в память одновременно. 

Для Android в версии 2.8 изоляция службы Dart VM была разделена на отдельный пакет, который можно загружать отдельно, что приводит к экономии памяти до 40 МБ до тех пор, пока изоляция службы не понадобится. 

Объем памяти был дополнительно сокращен до 10% благодаря тому, что виртуальная машина Dart информирует ОС о том, что страницы в памяти, используемые программой AOT, поддерживаются файлом, который, скорее всего, не нужно будет читать снова. Таким образом, страницы, на которых хранилась копия данных с файловой поддержкой, затем могут быть восстановлены и использованы для других целей.

Профилирование

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

С этой целью стабильный выпуск 2.8 теперь отправляет события трассировки в регистратор systrace Android, если он включен при запуске приложения, и эти события отправляются, даже если приложение Flutter построено в режиме выпуска.

События отслеживания флаттера теперь отображаются (внизу) в инструментах записи Systrace Android.
События отслеживания флаттера теперь отображаются (внизу) в инструментах записи Systrace Android

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

Новые события потока в трассировках производительности теперь позволяют отслеживать время жизни кэшированных растровых изображений.

Flutter DevTools

Для устранения проблем с производительностью в этом выпуске DevTools добавлена новая функция «Улучшенная трассировка», которая поможет вам диагностировать искажения пользовательского интерфейса, связанные с дорогостоящими операциями сборки, компоновки и отрисовки.

Flutter DevTools новая функция Улучшенная трассировка
Flutter DevTools новая функция Улучшенная трассировка

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

Кроме того, в этом выпуске DevTools добавлена ​​новая поддержка для профилирования производительности запуска вашего приложения . Этот профиль содержит образцы ЦП от инициализации виртуальной машины Dart до визуализации первого кадра Flutter. 

После того, как вы нажмете кнопку «Запуск приложения профиля» и загрузите профиль запуска приложения, вы увидите, что для профиля выбран пользовательский тег «AppStartUp». 

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

Обновление языка Dart

Как это часто бывает, это последнее обновление Flutter также сопровождается одновременным обновлением SDK языка программирования Dart до версии 2.15. Некоторые из ранее упомянутых приростов производительности произошли благодаря этому обновлению, а это означает, что те, кто использует Dart вне Flutter, также должны увидеть некоторые из этих улучшений.

Помимо этого, Dart 2.15 вводит «отрывные части конструктора», которые позволяют вам обращаться к конструктору класса по имени в таких ситуациях, как «forEach ()» или «map ()». В зависимости от структуры кода вашего приложения это может быть особенно полезно для разработки пользовательского интерфейса Flutter.

Просмотры веб-платформы

Android и iOS — не единственные платформы, на которых улучшена производительность. В этом выпуске также улучшена производительность представлений платформы для Flutter Web.

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

Flutter Web реализует это с помощью HtmlElementView виджета, который позволяет размещать HTML-элементы внутри вашего веб-приложения Flutter. Если вы используете веб-версии плагина google_maps_flutter или плагина video_player, или вы следуете совету команды Flutter о том, как оптимизировать отображаемые изображения в Интернете , то вы используете представления платформы.

В предыдущих версиях Flutter при встраивании представления платформы сразу создавался новый canvas, а каждое дополнительное представление платформы добавляло еще один canvas. Создание дополнительных canvas обходится дорого, поскольку каждый из них равен размеру всего окна. В этом выпуске повторно используются canvas, созданные для более ранних представлений платформы, поэтому вместо того, чтобы нести затраты 60 раз в секунду, вы понесете затраты один раз за все время существования приложения. Это означает, что у вас может быть несколько HtmlElementView экземпляров в своих веб-приложениях без снижения производительности, а также уменьшения нежелательной прокрутки при использовании представлений платформы.

Экосистема

Flutter — это не только фреймворк, движок и инструменты — на pub.dev есть более 20000 Flutter — совместимых пакетов и плагинов, и каждый день их становится все больше.

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

Google реклама во Flutter 2.8

Прежде всего, это выпуск Google Mobile SDK для Flutter. Этот выпуск поддерживает 5 форматов рекламы, включает поддержку как AdMob, так и Менеджера рекламы, а также включает бета-версию новой функции посредничества, которая поможет вам оптимизировать эффективность рекламы. 

Чтобы узнать больше об интеграции Google Рекламы в ваше приложение Flutter, а также о других вариантах монетизации, посетите новую страницу монетизации на flutter.dev

WebView 3.0

Еще одна новая версия, которая на этот раз идет с Flutter 2.8 — это версия 3.0 плагина webview_flutter . Увеличен номер версии из-за количества новых функций, а также из-за потенциально критического изменения в работе веб-представлений на Android.

В предыдущих версиях webview_flutter гибридный режим композиции был доступен, но не установлен по умолчанию. Гибридная композиция устраняет ряд проблем, которые были в предыдущем режиме виртуальных дисплеев по умолчанию.

Основываясь на отзывах пользователей и отслеживании проблем можно полагать, что настало время, чтобы гибридная композиция стала стандартом по умолчанию. Кроме того, webview_flutter также добавлен ряд востребованных функций:

  • Поддержка POST, а также GET для заполнения содержимого ( 4450 , 4479 , 4480 , 4573 )
  • Загрузка HTML из файлов и строк ( 4446 , 4486 , 4544 , 4558 )
  • Поддержка прозрачного фона ( 3431 , 4569 , 4570 )
  • Запись файлов cookie перед загрузкой содержимого ( 4555 , 4556 , 4557 )

Кроме того, в версии 3.0 webview_flutter предоставляется предварительная поддержка новой платформы: Интернета. Многие разработчики просили предоставить возможность разместить веб-просмотр в веб-приложении Flutter, что позволяет создавать приложение для мобильных устройств или веб-сайтов из единой базы кода.

При работе в сети он работает так, как и следовало ожидать:

Работа плагина WebView 3.0 для Flutter
Работа плагина WebView 3.0 для Flutter

Flutter Favorites

Назначены следующие пакеты флаттер как приоритетные к использованию:

  • Три пользовательских маршрутизатор пакетов для нового API маршрутизатора: beamerroutemaster и go_router
  • drift, переименование уже способной и популярной библиотеки реактивного постоянства для Flutter и Dart, построенной на основе sqlite
  • freezed, «языковой патч» Dart, обеспечивающий простой синтаксис для определения моделей, клонирования объектов, сопоставления с образцом и т. д.
  • dart_code_metrics
  • И несколько большим нетерпением GUI пакеты: flex_color_schemeflutter_svgfeedbacktoggle_switch, иauto_size_text
Что нового во Flutter 2.8
Приложение Flexfold создано с использованием flex_color_scheme

Поздравляем авторов пакетов и благодарим вас за поддержку сообщества Flutter своим упорным трудом. Если вы заинтересованы в номинации вашего любимого пакета Flutter на премию Flutter Favorite, следуйте рекомендациям и инструкциям на странице программы Flutter Favorite

Firebase

Еще одна большая часть экосистемы Flutter — FlutterFire, которую используют две трети приложений Flutter. В этом выпуске добавлен набор новых функций, упрощающих создание приложений с использованием Flutter и Firebase:

  • Все плагины FlutterFire переходят из бета-версии в стабильную.
  • Новая поддержка в DartPad нескольких сервисов Firebase
  • Новые библиотеки для упрощения создания пользовательского интерфейса для аутентификации и запросов в реальном времени Firestore.
  • Новое сопоставление объектов / документов Firestore для Flutter, доступное в альфа-версии

Плагины, переходящие на стабильную версию для Android, iOS и Интернета, включают аналитику , динамические ссылки , обмен сообщениями в приложениях , мониторинг производительности , базу данных в реальном времени , удаленную конфигурацию и, новичок в блоке, установки

Плагин проверки приложений и поддержка платформы macOS все еще находятся в стадии бета-тестирования из-за фазы самих библиотек Firebase, которые также находятся в стадии бета-тестирования. 

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

Flutter Desktop

Выпуск Flutter 2.8 включает в себя еще один большой шаг на пути к стабильной версии Windows, macOS и Linux. 

Недостаточно, чтобы Flutter работал на Desktop в стабильном канале (что он уже делает в бета-версии под флагом ), он должен хорошо работать для языков и культур по всему миру и для людей с разными способностями.

Одним из примеров продолжающейся работы по подготовке flutter desktop к стабильному выпуску является полная реорганизация того, как Flutter обрабатывает события клавиатуры, чтобы обеспечить синхронный ответ

Это позволяет виджету обрабатывать нажатие клавиши и отменять его распространение по остальной части дерева. Первоначальная работа была сделана во Flutter 2.5, а Flutter 2.8 добавляет исправления для проблем и регрессов по мере приближения к стабильному качеству. 

Это в дополнение к текущей работе по перепроектированию того, как обрабатывается ввод с клавиатуры для конкретных устройств, и рефакторингу того, как Flutter обрабатывает редактирование текста , — все это необходимо для настольных приложений с интенсивным вводом с клавиатуры.

Кроме того, продолжается расширение поддержки Flutter для визуальной плотности, чтобы сделать интерфейс более удобным для Desktop.

Удаление канала разработчика (dev channel)

«Канал» Flutter определяет, насколько быстро базовая структура и движок Flutter изменяются на вашей машине разработки, при этом стабильная среда представляет наименьший отток, а мастер — наибольшую. 

Из-за нехватки ресурсов создатели Флаттера недавно прекратили обновление dev канала, т.к. менее 3% разработчиков Flutter используют этот dev канал. 

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

Если вы проводите все свое время на стабильном канале (как это делают более 90% разработчиков Flutter), вы его не пропустите. Отбросив его, вы получите на одно решение меньше, а команда Flutter сможет тратить свое время и силы на другие дела.

Вы можете решить, какой канал вам нужен, с помощью flutter channelкоманды. Вот как команда Flutter думает о каждом канале:

  • stable — канал представляет высочайшее качество сборки. Они выпускаются ежеквартально (примерно) и исправляют критические проблемы между ними. Это «медленный» канал: безопасное, зрелое, долгосрочное обслуживание.
  • beta — канал обеспечивает быстрые двигающуюся альтернативу стабильный для тех, кто любят попробовать новые функции быстрее. В настоящее время выпускается ежемесячно, стабилизируется перед выпуском. Это «быстрый» канал.
  • master — активный канал развития. Разработчики flutter не предоставляют поддержки по этому каналу, но проводят для него полный набор модульных тестов. Это подходящий канал для участников или опытных пользователей, которым комфортно работать с нестабильными сборками.

Поскольку dev в ближайшие месяцы будет выведен канал из эксплуатации, рассмотрите возможность использования каналов beta или master, в зависимости от вашей потребности в самых последних и самых значительных изменениях фреймворка.

Критические изменения

В этом выпуске Flutter 2.8 не содержит критических изменений, за исключением устаревших API, срок действия которых истек и которые были удалены в соответствии с политикой критических изменений.

  • 90292 Удалить autovalidate устаревшие версии
  • 90293 Удалить FloatingHeaderSnapConfiguration.vsync устаревание
  • 90294 Удалить AndroidViewController.id устаревание
  • 90295 Удалить BottomNavigationBarItem.title устаревание
  • 90296 Удалите устаревшие классы форматирования ввода текста

Видео обзор Flutter 2.8

Flutter 2.8: What’s new

Если вы все еще используете эти API и хотите получить подробную информацию о том, как обновить свой код, вы можете прочитать руководство по миграции на flutter.dev 

Полный разбор и описание новых функций обновления Flutter 2.8 доступен на официальном канале флаттер в medium (ссылка ниже).

Источник: medium.com

Похожие записи