Официальные примечания к выпуску:medium.com/flutter/Я…
В северном полушарии пришла зима, желтеют листья и падает с ветром температура, а к вам незаметно пришла последняя стабильная версия года. разрешите намFlutter 2.8Скажи привет~ Это обновление содержит207 участников и 178 рецензентовтяжелой работы, Все произведено вместе2424 PR,закрыто2976 выпусков. Особая благодарность самому выдающемуся участнику сообщества в этом выпуске: Бартошу Сельвезюку, инженеру-разработчику Flutter из Very Good Ventures, Он сосредоточился на подключаемом модуле камеры для веб-платформы и отправил 23 PR.
Все вышеперечисленные результаты дали движку Flutter и DevTools очень значительное улучшение производительности. Также принесСтабильный выпуск Flutter-версии Google Mobile Ads SDK, Куча новых функций и оптимизаций для Firebase, Flutter WebView 3.0, Новый пакет Flutter Favorite, большой шаг к стабильной версии рабочего стола, и новая версия DartPad, которая поддерживает больше пакетов. Хотя это последний стабильный релиз в этом году, он не является последним. Давайте взглянем!
представление
Основная цель Flutter — поддерживать его качество, как всегда. Мы тратим много времени на то, чтобы Flutter работал гладко и стабильно на самых разных устройствах.
запуск приложения
Это обновление оптимизирует задержку запуска приложения. Мы протестировали его в приложениях GPay с более чем миллионом строк кода, чтобы убедиться, что изменения работают в рабочих приложениях. Эти изменения коснутся GPay.Сокращение времени загрузки примерно на 50 % на недорогих устройствах Android и на ~ 10 % на устройствах высокого класса..
Мы также внесли некоторые улучшения в стратегию Flutter GC для вызова Dart VM, чтобы избежать несвоевременного GC во время запуска программы.
Например, перед рендерингом первого кадра на Android-устройстве Flutterтолько приTRIM_LEVEL_RUNNING_CRITYCAL
Уведомляет виртуальную машину Dart о нехватке памяти при появлении сигнала с более высоким уровнем..
В местных испытанияхИнтервал появления начального кадра уменьшен примерно на 300 мс на недорогих устройствах Android..
В предыдущих версиях Flutterиз-за чрезмерной осторожности, Поток платформы блокируется во время создания PlatformView.После тщательных рассуждений и испытаний, Мы убрали этап частичной сериализации, сделав GPayВремя загрузки уменьшено как минимум на 100 мс на недорогих устройствах..
Долгое время инициализация диспетчера шрифтов по умолчанию перед инициализацией первого изолята Dart приводила к искусственным задержкам. Поскольку это основное узкое место задержки,Задержка инициализации диспетчера шрифтов по умолчаниюЗапуск одновременно с первым изолятом Dart снижает задержку запуска и делает все упомянутые выше оптимизации запуска более очевидными.
память приложения
Поскольку Flutter загрузит изоляцию службы Dart VM как можно быстрее, и загрузить его в память вместе с кодом AOT, привязанным к приложению, Это заставляет разработчиков FlutterТрудности с отслеживанием показателей памяти на ограниченных устройствах. Во Flutter 2.8 служба изолирует Dart VM на устройствах Android.был разделен на отдельные пакеты, Может загружаться по отдельности, уменьшая использование памяти примерно на 40 МБ перед загрузкой. Первоначально Dart VM отправлял уведомления об использовании памяти программами AOT в операционную систему. Он был перемещен в файловую резервную копию, которая не требует многократного чтения, а последующий объем памяти был дополнительно уменьшен примерно на 10%. Таким образом, память, в которой ранее хранилась копия данных файла, может быть освобождена и использована для других целей.
анализ производительности
В некоторых сценариях разработчики хотят видеть как события отслеживания производительности Flutter, так и Android. Или просмотрите события трассировки в рабочем режиме, чтобы лучше понять проблемы с производительностью приложений. Для этого во Flutter 2.8 теперь есть возможность после запуска приложения: Отправлять события трассировки производительности в регистратор событий Android, также в рабочем режиме.
Кроме того, некоторым разработчикам нужны дополнительные трассировки производительности о поведении растрового кэша. Чтобы уменьшить заикание при анимации, это позволяет Flutter быстро повторно использовать дорогостоящие повторно используемые изображения вместо их перерисовки. новое в отслеживании производительностиПотоковые событияПозволяет разработчикам отслеживать жизненный цикл растровых кэшированных изображений.
Flutter DevTools
Для отладки проблем с производительностью в новую версию DevTools добавлена новая функция «Расширенная трассировка». Используется, чтобы помочь разработчикам диагностировать заикание пользовательского интерфейса, вызванное дорогостоящими операциями сборки, компоновки и рисования.
Когда любая из функций отслеживания включена, на временной шкале будут отображаться сборка виджета, макет RenderObject и события отрисовки RenderObject по мере необходимости.
Кроме того, в новой версии DevTools добавлена поддержка анализа производительности запуска приложений. Этот файл конфигурации содержит образцы ЦП от инициализации Dart VM до рендеринга первого кадра Flutter. После того, как вы нажмете кнопку «Профиль запуска приложения» и загрузите профиль запуска приложения, Вы увидите, что для профиля выбрана пользовательская вкладка «AppStartUp». Вы также можете загрузить профили запуска приложений, выбрав этот фильтр пользовательских меток (если он есть) в списке доступных пользовательских меток. При выборе этой вкладки отобразятся данные профиля запуска вашего приложения.
Представление платформы для веб-платформы
Мало того, что платформы Android и iOS получают улучшения производительности, этот выпуск также включает оптимизацию производительности для представления веб-платформы Flutter.
Представление платформы — это среда для встраивания компонентов пользовательского интерфейса во Flutter с хост-платформы.
Использование флаттера в ИнтернетеHtmlElementView
Виджет реализует эту функциональность, позволяя вам встраивать элементы HTML в ваше веб-приложение Flutter.
Если вы используете веб-версию плагина google_maps_flutter или плагина video_player,
Или вы следите за командой Flutter наКак оптимизировать изображения для отображения в Интернетекак было предложено, вы используете представление платформы.
В предыдущих версиях Flutter встраивание представления платформы создавало новый холст, и каждый раз, когда встраивалось представление платформы, добавлялся новый холст.
Создание дополнительных полотен — очень затратная операция, потому что каждое полотно имеет такой же размер, как и все окно.
Во Flutter 2.8Повторно используйте холст, созданный для предыдущего представления платформы.,
Таким образом, вы не будете нести 60-кратную стоимость в секунду за время жизни приложения, а только стоимость одного создания.
Это означает, что вы можете иметь несколькоHtmlElementView
экземпляр без снижения производительности,
Это также уменьшает заикание при прокрутке при использовании представлений платформы.
экология
Flutter — это больше, чем просто фреймворки, движки и инструменты — на pub.dev есть более 2w Flutter-совместимых пакетов и плагинов, и каждый день их становится больше. Большое количество повседневных операций разработчиков Flutter также является частью огромной экосистемы. Итак, давайте посмотрим, что изменилось в экосистеме Flutter со времени последней версии.
Google Реклама для Flutter Ads
Прежде всего,Google Mobile SDK для Flutter официально выпущен в ноябре. Этот выпуск поддерживает 5 форматов рекламы, интегрирует поддержку AdMob и Менеджер рекламы, Также включает бета-версию новой функции общественного транспорта, которая поможет вам оптимизировать показы объявлений. Для получения дополнительной информации об интеграции Google Ads в приложения Flutter и других вариантах монетизации см. пожалуйста, проверьтеСтраница на flutter.dev.
WebView 3.0
Еще одна новая версия, которая на этот раз поставляется с Flutter:плагин webview_flutterверсии 3.0.
Мы увеличили номер основной версии из-за увеличения количества новых функций, а также из-за того, что могут быть серьезные изменения в работе веб-представлений на Android.
в предыдущемwebview_flutter
версия Гибридная композиция доступна, но не по умолчанию.
И теперь он исправляет многие проблемы, которые раньше по умолчанию выполнялись в режиме виртуального дисплея.
Основываясь на отзывах пользователей и нашей системе отслеживания проблем, мы считаем, что пришло время сделать гибридную композицию по умолчанию.
также,webview_flutter
Также добавлены некоторые очень востребованные функции:
- Поддерживает использование POST и GET для загрузки контента
- Загрузить файл или строковое содержимое в виде HTML
- Поддержка прозрачного фона
- Установите файлы cookie перед загрузкой контента
Кроме того, в версии 3.0webview_flutter
Первоначальная поддержка новой платформы: Flutter Web.
Было много запросов на возможность размещения веб-представлений в веб-приложениях Flutter.
Это позволяет разработчикам создавать мобильные или веб-приложения из единого репозитория исходного кода.
Как выглядит размещение веб-представления в веб-приложении Flutter?
С точки зрения кодирования это то же самое:
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'package:webview_flutter_web/webview_flutter_web.dart';
void main() {
runApp(const MaterialApp(home: HomePage()));
}
class HomePage extends StatefulWidget {
const HomePage({Key? key}) : super(key: key);
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
@override
void initState() {
super.initState();
// required while web support is in preview
if (kIsWeb) WebView.platform = WebWebViewPlatform();
}
@override
Widget build(BuildContext context) => Scaffold(
appBar: AppBar(title: const Text('Flutter WebView example')),
body: const WebView(initialUrl: 'https://flutter.dev'),
;
}
При работе на Flutter Web он работает так, как и следовало ожидать:
Обратите внимание, что в настоящее времяwebview_flutter
веб-реализация имеет много ограничений, поскольку она построена с использованием фреймов,
фреймы iframe поддерживают только простую загрузку URL-адресов и не могут управлять загружаемым содержимым или взаимодействовать с ним.
Однако из-за высокого спроса мы решили предоставить webview_flutter_web в качестве несанкционированного плагина.
Если вы хотите попробовать, добавьте в pubspec.yaml следующее:
dependencies:
webview_flutter: ^3.0.0
webview_flutter_web: ^0.1.0 # 显式依赖未经认可的插件
Если у вас есть какие-либо отзывы о webview_flutter v3.0, независимо от того, касается ли это веб-платформы или нет, ПожалуйстаПроблемы с журналом в репозитории Flutter. Кроме того, если вы раньше не использовали веб-просмотр или хотите освежить в памяти, пожалуйста, проверьтеновая кодовая лаборатория веб-просмотра, Он проведет вас через процесс размещения веб-контента в приложении Flutter.
Flutter Favorites
Совет экосистемы Flutter снова собрался, чтобы обозначить следующие пакеты как избранные пакеты Flutter:
- Три настраиваемых пакета маршрутизации для нового API маршрутизации (он же Navigator 2):beamer,routemasterа такжеgo_router;
- drift, Переименование и без того мощной и популярной библиотеки реактивной персистентности Flutter и Dart, построенной на sqlite;
- freezed, «Языковой патч» Dart, предоставляющий простой синтаксис для определения моделей, клонирования объектов, сопоставления с образцом и т. д.;
- dart_code_metrics;
- И пакет с приятным интерфейсом:flex_color_scheme,flutter_svg,feedback,toggle_switchа такжеauto_size_text.
Поздравляем авторов этих пакетов и благодарим вас за поддержку сообщества Flutter благодаря вашей тяжелой работе. Если вы хотите номинировать свою любимую сумку Flutter на премию Flutter Favorite Awards, Пожалуйста, следуйтеСтраница любимых программ Flutterруководства и инструкции выше.
Плагины для конкретных платформ (пакеты плагинов)
Если вы являетесь автором плагина, вы должны решить, какие платформы вы будете поддерживать. Если вы создаете плагин с собственным кодом для конкретной платформы, Ты сможешьИспользуйте свойство pluginClass в pubspec.yaml проекта.Для этого в этом свойстве будет указано имя нативного класса, обеспечивающего нативную функциональность:
flutter:
plugin:
platforms:
android:
package: com.example.hello
pluginClass: HelloPlugin
ios:
pluginClass: HelloPlugin
Однако по мере того, как Dart FFI становится более зрелым, становится возможным реализовать специфичные для платформы функции, используя 100% Dart, подобноpath_provider_windows packageкак сделано. В этом случае у вас нет собственных классов для использования, Но вы по-прежнему хотите указать, что ваш пакет поддерживает только определенные платформы. На этом этапе вместо этого вы можете использовать свойство dartPluginClass:
flutter:
plugin:
implements: hello
platforms:
windows:
dartPluginClass: HelloPluginWindows
С помощью этой настройки вы можете настраивать плагины для определенных платформ, даже если у вас нет собственного кода. Вы также должны указать класс плагина Dart, Для получения подробной информации вы можетеДокументация по реализации платформы только для Dart на flutter.devдля расширенного чтения.
настольная платформа
Flutter 2.8 — еще один большой шаг вперед на пути к стабильным выпускам для Windows, macOS и Linux. Наши целевые стандарты качества высоки, включая поддержку интернационализации и локализации, НапримерПоддержка нового китайского метода ввода,Поддержка корейского метода вводаи просто слилисьМетод ввода кандзи (японский)служба поддержки. Или, как мы строим плотноПоддержка специальных возможностей WindowsТакой же. Недостаточно, чтобы Flutter работал на рабочем столе в стабильном канале, Он должен хорошо работать на языках и культурах по всему миру и на устройствах с разными возможностями. Мы не достигли того, чего хотели, но будущее светлое!
Одним из примеров этого является рефакторинг архитектуры Flutter для обработки событий клавиатуры, чтобы обеспечить синхронные ответы. Это позволяет виджету обрабатывать нажатия клавиш и перехватывать их проход через остальную часть дерева виджетов. Мы выполнили эту работу во Flutter 2.5 и исправили множество проблем во Flutter 2.8. Это изменение того, как мы обрабатываем ввод с клавиатуры для конкретного устройства, И в дополнение к текущей работе по рефакторингу того, как Flutter обрабатывает редактирование текста, Все это требуется для настольных приложений с интенсивным вводом данных, таких как клавиатура.
Кроме того, мы продолжаемРасширение определения визуальной плотности до Flutter, Предоставьте настройки для выравнивания диалоговых окон, чтобы разработчики могли реализовать более удобный пользовательский интерфейс рабочего стола.
Наконец, команда Flutter не единственная, кто работает над рабочим столом Flutter. Например, рабочая группа Canonical работает с Invertase, Разрабатывайте самые популярные плагины Flutter Firebase для Linux и Windows.
ты сможешьВ блоге InvertaseПодробнее о предварительном просмотре.
DartPad
Ни один выпуск этой новой версии Flutter не будет полным без улучшений инструментов. Мы сосредоточимся на улучшениях DartPad, самая большая из которых — поддержка большего количества пакетов. Фактически, в настоящее время для импорта доступны 23 пакета. Помимо нескольких сервисов Firebase, в список входят такие сервисы, как Популярные пакеты, такие как bloc, character, collection, google_fonts и flutter_riverpod. Команда DartPad продолжит добавлять новые пакеты. Если вы хотите увидеть, какие пакеты поддерживаются в настоящее время, вы можете щелкнуть значок информации в правом нижнем углу.
Если вы хотите узнать о планах по добавлению новых пакетов в DartPad со временем, пожалуйста, проверьтеЭта статья на вики Dart. Есть еще одна новая функция DartPad, которая также очень удобна. До этого DartPad всегда работал с последней стабильной версией. В новой версии вы можете использовать новыйМеню каналапереключиться на последнюю Выпуски бета-канала и предыдущие стабильные выпуски (называемые «Старый канал»).
Это полезно, если вы пишете сообщение в блоге, а последняя стабильная версия недостаточно нова. (На самом деле удобно переключаться между разными каналами для отладки и проверки BUG.)
Удалить канал разработки
«Канал» Flutter определяет скорость, с которой фреймворк и движок Flutter изменяются на вашем компьютере для разработки.
стабильный представляет наименьшее количество изменений, в то время как мастер представляет большинство.
Из-за нехватки ресурсов команды мы в последнее время прекратим обновление канала разработки.
Хотя мы получили некоторые связанные вопросы, мы обнаружили, что менее 3% разработчиков Flutter используют канал разработки.
Поэтому мы решили начать процесс официального вывода канала разработки из эксплуатации.
Хотя немногие разработчики используют канал разработки, инженеры Flutter тратят много времени и усилий на его поддержку.
Если вы тратите все свое время на стабильный канал (как это делают более 90% разработчиков Flutter),
Тогда это изменение не повлияет на ваше ежедневное развитие.
Отказавшись от него, вы можете принять на одно решение меньше, а команда Flutter может потратить свое время и энергию на другие вещи.
вы можете использоватьflutter channel
команда, чтобы решить, какой канал вы хотите.
Вот что команда Flutter говорит о каждом канале:
- Стабильный каналПредставляет самые качественные сборки, которые у нас есть. Они выпускаются (примерно) ежеквартально, с исправлениями для критических проблем между ними. Это «медленный» канал: безопасный, зрелый, долгосрочный сервис.
- Бета-каналПредоставляет альтернативу быстрой настройке для разработчиков, привыкших к более быстрому темпу. В настоящее время выпускается ежемесячно, стабильно до релиза. Это «быстрая» полоса. Если канал разработки удовлетворяет потребности, которые бета-канал не может удовлетворить, Мы можем изменить наше представление о бета-канале, чтобы удовлетворить эти потребности. (Например, ускорение выпуска бета-версий или снижение уровня тестирования и исправлений, которые мы выполняем для бета-версий).
- Мастер-каналнаш активный канал развития. Мы не предоставляем поддержку для этого канала, но мы запускаем для него полный набор модульных тестов. Это правильный канал для участников или старших разработчиков, которым нравятся нестабильные сборки. На этом канале мы быстро бегаем и ломаем вещи (а потом быстро их чиним).
Когда мы удалим канал разработки в ближайшие несколько месяцев, рассмотрите возможность использования бета-версии или основного канала. Это зависит от вашей терпимости к изменениям и вашего баланса между новейшим и лучшим SDK.
критические изменения
Как всегда, мы прилагаем все усилия, чтобы уменьшить количество критических изменений в каждом выпуске. В этом выпуске Flutter 2.8 устарел и, согласно нашимПолитика основных измененийНикаких критических изменений, кроме удаленных устаревших API.
- 90292 Remove autovalidate deprecations
- 90293 Remove FloatingHeaderSnapConfiguration.vsync deprecation
- 90294 Remove AndroidViewController.id deprecation
- 90295 Remove BottomNavigationBarItem.title deprecation
- 90296 Remove deprecated text input formatting classes
Если вы все еще используете эти API и хотите узнать, как перенести свой код, вы можете прочитатьРуководство по миграции на flutter.dev. Как всегда большое спасибо сообществупредоставленные тестовые примеры, Помогите нам определить эти критические изменения.
Суммировать
Подводя итоги 2021 года и ожидая наступления 2022 года, команда Flutter хотела бы поблагодарить все сообщество Flutter за их работу и поддержку. Правда, мы создаем Flutter для все большего числа разработчиков в мире, Но мы не смогли бы поддерживать и строить его без вас и каждого разработчика. Сообщество Flutter отличается от других, и мы ценим все, что вы делаете. Хорошего отдыха и до встречи в новом году!