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

OSCHINA-MIRROR/CarGuo-GSYFlutterBook

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

Добро пожаловать в Flutter 2.8! В этом выпуске содержится работа более чем 207 участников и Yöntem olarak, kavramlar ve terimler diller arası geçişte korunmuştur. İnceleme sonucunda, belirli bir dil bilgisi gerektiren veya teknik bir bağlamı olan ifadelerin çevirisi, orijinal metindeki anlamını koruyacak şekilde yapılmıştır.

Добро пожаловать в Flutter 2.8! В этом выпуске содержится работа более чем 207 участников и 178 рецензентов, что составляет 2 424 объединённых запроса на слияние и закрытие 2 976 задач.

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

## Запуск приложения

**Этот выпуск улучшил запуск приложений с задержками**, это улучшение было проведено в Google Pay, как крупном приложении с кодом более чем в миллион строк, использование которого для тестирования гарантирует, что изменения действительно влияют на производительность.

**Все эти улучшения привели к снижению задержек запуска Google Pay на низкосортных Android-устройствах на 50%, а на высокосортных — на 10%**.

Flutter может помочь избежать неуместного сбора мусора во время запуска приложения путём воздействия на стратегию сбора мусора Dart VM.

> Например, до отрисовки первой фреймовой картинки на Android, Flutter теперь [сообщает Dart VM только о сигналах давления памяти уровня TRIM_LEVEL_RUNNING_CRITICAL и выше](https://github.com/flutter/flutter/issues/90551). В локальных тестах этот изменение уменшило время отрисовки первой фреймы на низкосортных устройствах до 300 миллисекунд.

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

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

Оптимизация памяти

Поскольку Flutter часто загружает "сервисный Isolate" Dart VM, который представляет собой часть AOT-кода, связанную с приложением, Flutter загружает оба этих компонента одновременно в память. Это вызывает проблемы при профилировании производительности для устройств с ограниченной памятью, как было замечено. В версии 2.8 для устройств на базе Android сервисный изолят Dart VM был разделен на отдельную библиотеку, что позволило сэкономить до 40 МБ памяти.При помощи сообщений системы о состоянии памяти использование памяти было снижено ещё на 10%, так как AOT программы могут использовать память без необходимости повторной загрузки файлов, а страницы, использовавшиеся ранее для хранения бэкапов данных файлов, теперь могут быть освобождены для других целей.

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

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

image1

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

Инструменты Flutter DevTools

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

После активации любой из этих функций трассировки временная шкала будет содержать новые события для сборки виджетов, размещения рендера объектов и отрисовки рендера объектов (в зависимости от ситуации).

image3

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

После нажатия кнопки "Профилировать запуск приложения" и загрузки профиля запуска приложения разработчики смогут увидеть выбранный ими пользовательский метка "AppStartUp". Также они могут загрузить профиль запуска приложения, выбрав этот пользовательский метка фильтр из доступного списка пользовательских меток (если он существует).

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

Веб-платформенные представления

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

Flutter Web использует виджет HtmlElementView, который позволяет разработчикам встраивать HTML-элементы в приложения Flutter Web.Если вы используете плагины google_maps_flutter или video_player для версий для веба, или если вы следовали рекомендациям команды Flutter по оптимизации отображения изображений в сети, то вы уже используете platform views.В предыдущих версиях Flutter platform view сразу создавал новый холст, а каждый дополнительный platform view добавлял ещё один холст. Однако создание дополнительных холстов было дорогостоящим процессом, так как каждый холст был размером с весь экран.

Поэтому в данном выпуске используется повторное использование ранее созданного холста platform view, что означает, что разработчики могут иметь несколько экземпляров HtmlElementView в своих веб-приложениях без снижения производительности, а также уменьшается скроллинг при использовании platform views.

WebView 3.0

Следующее новое обновление webview_flutter — это увеличение номера версии, которое произошло благодаря большому количеству новых возможностей и значительному изменению способа работы web-вью на Android.

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

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

Кроме того, в версии 3.0 пакет webview_flutter предоставляет начальную поддержку новых платформ: веб. Эта поддержка позволяет разработчикам создавать мобильные и веб-приложения из одного кодового репозитория, хостя веб-вью в приложении Flutter для веба. Вот как выглядит веб-вью в Flutter Web:```dart 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 createState() => _HomePageState(); }

class _HomePageState extends State { @override void initState() { super.initState();

// требуется пока поддержка веба находится в режиме предварительной проверки
if (kIsWeb) WebView.platform = WebWebViewPlatform();

}

@override Widget build(BuildContext context) => Scaffold( appBar: AppBar(title: const Text('Пример Flutter WebView')), body: const WebView(initialUrl: 'https://flutter.dev'), ); }


При запуске на вебе она также работает так, как ожидают разработчики:

![Пример Flutter WebView](http://img.cdn.guoshuyu.cn/20211223_Flutter-280/image5)

Обратите внимание, что **на данный момент реализация `webview_flutter` для веба имеет множество ограничений, поскольку она основана на использовании `iframe`**.

Поддерживается только простое загрузочное URL, управление содержимым или взаимодействие с ним недоступны.

> Для получения более подробной информации обратитесь к [Readme `webview_flutter_web`](https://pub.dev/packages/webview_flutter_web).

Однако, поскольку `webview_flutter_web` очень популярен, он будет предоставлен как [нерекомендованный плагин](https://docs.flutter.dev/development/packages-and-plugins/developing-packages#endorsed-federated-plugin). Если вы хотите попробовать его, добавьте следующую строку в ваш `pubspec.yaml`:

```yaml
dependencies:
  webview_flutter: ^3.0.0
  webview_flutter_web: ^0.1.0 # явное указание нерекомендованного плагина
```## Flutter Favorites

Экосистемный комитет снова провёл заседание и определил следующие Flutter Favorites пакеты:
- Три пакета для кастомизации маршрутизатора: [`beamer`](https://pub.dev/packages/beamer), [`routemaster`](https://pub.dev/packages/routemaster) и [`go_router`](https://pub.dev/packages/go_router)
- [`drift`](https://pub.dev/packages/drift), мощная и популярная библиотека для реактивной персистентности в Flutter и Dart, основанная на `SQLite`
- [`freezed`](https://pub.dev/packages/freezed), "языковое дополнение" для Dart, которое предоставляет простой синтаксис для определения моделей, клонирования объектов, шаблонного соответствия и т.д.
- [`dart_code_metrics`](https://pub.dev/packages/dart_code_metrics)
- Несколько красивых графических пакетов для пользовательского интерфейса: [`flex_color_scheme`](https://pub.dev/packages/flex_color_scheme), [`flutter_svg`](https://pub.dev/packages/flutter_svg), [`feedback`](https://pub.dev/packages/feedback), [`toggle_switch`](https://pub.dev/packages/toggle_switch) и [`auto_size_text`](https://pub.dev/packages/auto_size_text)![](http://img.cdn.guoshuyu.cn/20211223_Flutter-280/image6)

# Платформенно-зависимые пакеты

Если вы автор пакета, вам необходимо выбрать, какие платформы будут поддерживаться. Если вы используете платформенно-зависимый нативный код для создания плагинов, можно использовать атрибут `pluginClass` в проекте, чтобы реализовать это, как показано здесь:

```yaml
flutter:
  plugin:
    platforms:
      android:
        package: com.example.hello
        pluginClass: HelloPlugin
      ios:
        pluginClass: HelloPlugin
```Однако с развитием [Dart FFI](https://dart.dev/guides/libraries/c-interop) становится возможным реализация функционала для конкретной платформы полностью на Dart, как это сделано в пакете `path_provider_windows`. Поэтому если нет доступного нативного класса, но вы хотите указать ваш пакет как поддерживающий только некоторые платформы, следует использовать свойство `dartPluginClass`:```yaml
flutter:
  plugin:
    implements: hello
    platforms:
      windows:
        dartPluginClass: HelloPluginWindows

После использования этого конфигурационного файла, даже если нет нативного кода, пакет будет указан как поддерживающий только некоторые платформы, и также необходимо предоставить Dart-плагинный класс; подробнее можно узнать в документации по реализации Dart-only для платформ на сайте flutter.dev.

Firebase

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

Десктоп

Версия Flutter 2.8 сделала ещё один шаг в направлении стабильной версии для Windows, macOS и Linux. Это включает поддержку международализации и локализации, таких как недавно добавленная поддержка китайского IME, корейского IME и императорских символов.

Пример подготовки к стабильной версии: полная переработка способа Flutter обрабатывает события клавиатуры для возможности синхронного отклика, что позволяет виджетам обрабатывать нажатие кнопок и прекращать дальнейшее распространение этих событий по дереву.Изначально эти изменения были внедрены в Flutter 2.5 и Flutter 2.8 для исправления проблем, что привело к переработке подхода к обработке специфических для устройства событий клавиатуры, а также к переработке подхода Flutter к работе с редактированием текста; всё это было необходимо для приложений с плотной работой с клавиатурой. Кроме того, мы продолжаем расширять поддержку Flutter для визуальной плотности и открываем способы выравнивания диалоговых окон для более десктопной дружественной пользователю интерфейсы.image

Наконец, команда Flutter не единственная, которая работает над Flutter для десктопа. Например, десктопная команда Canonical сотрудничает с Invertase для реализации наиболее популярных плагинов Flutter Firebase на Linux и Windows.

image

DartPad

Улучшения DartPad, среди которых самое значительное — это поддержка большего количества пакетов. На самом деле теперь доступно 23 пакета для импорта, включая несколько сервисов Firebase, таких как bloc, characters, collection, google_fonts и flutter_riverpod. Команда DartPad продолжает добавлять новые пакеты, поэтому если вы хотите узнать, какие пакеты поддерживаются в данный момент, нажмите значок информации в правом нижнем углу.

image

Еще одно новое удобство DartPad также доступно. Раньше DartPad всегда запускал последнюю стабильную версию, но в этой версии можно выбрать канал beta или старую стабильную версию через меню каналов в области состояния.

image

Отключение канала dev

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

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

Вы можете использовать команду flutter channel, чтобы выбрать желаемый канал. Вот взгляд команды Flutter на каждый канал:

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

  • Канал beta предлагает быстрый способ продвижения для тех, кто привык к более быстрому темпу. В настоящее время он выпускается ежемесячно.

  • Канал master является нашим активным каналом разработки, мы не предоставляем поддержку для этого канала, но проводим полный набор юнит-тестов для него.

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

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

Как обычно, мы стремимся снизить количество критических изменений в каждом выпуске. В этом выпуске Flutter Yöntem 2.8 нет критических изменений, кроме устаревших API, которые были удалены согласно нашей политике критических изменений:

Пожалуйста, замените "Yöntem 2.8" на "Flutter 2.8":

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

Как обычно, мы стремимся снизить количество критических изменений в каждом выпуске. В этом выпуске Flutter 2.8 нет критических изменений, кроме устаревших API, которые были удалены согласно нашей политике критических изменений:- 90292 Удаление устаревшего autovalidate

  • 90293 Удаление устаревшей FloatingHeaderSnapConfiguration.vsync
  • 90294 Удаление устаревшего AndroidViewController.id
  • 90295 Удаление устаревшего BottomNavigationBarItem.title
  • 90296 Удаление устаревших классов формата ввода текста

Обзор

После просмотра обновлений Flutter 2.8 можно сказать, что основной акцент сделан на производительность, стабильность и корректировке WebView. В целом этот выпуск должен быть достаточно дружелюбным, так как практически нет критических изменений. Поэтому его стоит попробовать, особенно после выхода версии bkod 2.8.3.

Исправление: "особенно после выхода версии bkod 2.8.3." -> "особенно после выхода версии 2.8.3."

Финальный текст:

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

Обзор

После просмотра обновлений Flutter 2.8 можно сказать, что основной акцент сделан на производительность, стабильность и корректировке WebView. В целом этот выпуск должен быть достаточно дружелюбным, так как практически нет критических изменений. Поэтому его стоит попробовать, особенно после выхода версии 2.8.3.

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