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

OSCHINA-MIRROR/CarGuo-GSYFlutterBook

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

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

Перед тем как поговорить о выпуске Dart 3.7, стоит упомянуть приостановку разработки макросов в Dart. В течение праздников зимнего сезона команда Dart решила, что конкретные цели производительности макросов пока недостижимы, поэтому было решено вернуться к текущей реализации, сосредоточившись на редактировании (например, статическом анализе и завершении кода) и инкрементальной компиляции (первый шаг горячего перезапуска).

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

Кроме того, команда Dart уже работает над улучшением производительности build_runner и внедрением возможности языка augmentations (возможно, в немного другой форме), чтобы найти более прямой и удобный способ поддержки моделирования данных и работы с сериализацией и десериализацией.## Возможность использования заполнителей в переменных

Рассмотрим нововведения в Dart 3.7. Когда мы говорили о поддержке цифровых разделителей в Dart 3.6, мы упомянули, что Dart 3.6 позволяет использовать подчеркивание (_), чтобы сделать длинные числовые литералы более читаемыми:

1__000_000__000_000__000_000
0x4000_0000_0000_0000
0.000_000_000_01
0x00_14_22_01_23_45

В Dart 3.7 локальные переменные и параметры, объявленные с использованием _, становятся невязанными, то есть они могут быть объявлены несколько раз в одном и том же контексте без конфликта:

В Dart обычно используется _ для названия параметров обратного вызова, если его содержимое фактически не используется. Однако, если требуется несколько таких параметров, ранее они могли называться _, __, ___ и так далее, чтобы избежать конфликта имён.

В Dart 3.7 объявление параметров _ и локальных переменных больше не создаёт новые переменные, поэтому нет возможности возникновения конфликта имён. Таким образом, следующий пример кода становится недействительным:

var [1, 2, 3].map((_) {
  return _.toString();
  //     ^ Ошибка! Ссылка на неизвестную переменную.
});

Аналогичное использование шаблонов также работает аналогично: var [_, _, третье, _, _] = [1, 2, 3, 4, 5];

Новый стиль форматирования в DartDart 3.7 включает перезаписанный Dart формат (dart format) и использует новый стиль форматирования.

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

// Старый стиль:
void writeArgumentList(Token leftBracket, List<AstNode> elements, Token rightBracket) {
  writeList(leftBracket: leftBracket, elements: elements, rightBracket: rightBracket, allowBlockArgument: true);
}

// Новый стиль:
void writeArgumentList(Token leftBracket, List<AstNode> elements, Token rightBracket) {
  writeList(leftBracket: leftBracket, elements: elements, rightBracket: rightBracket, allowBlockArgument: true);
}

На данный момент, выбор между старым и новым стилем зависит от версии языка кода, который требуется отформатировать:

  • Если версия языка — Yöntem 3.6 или ниже, то код будет отформатирован в соответствии со старым стилем.
  • Если версия языка — 3.7 или выше, то код будет отформатирован согласно новому стилю.

Кроме того, чтобы определить версию языка для каждого файла, dart format ищет файл package_config.json, что означает, что разработчики должны выполнить команду dart pub get перед форматированием пакетного кода.

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

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

formatter:
  page_width: 123
  • Отключение форматирования для определённых областей кода, позволяющее разработчикам использовать специальные метки для исключения определённых участков кода из автоматического форматирования:

        main() {
          // dart format off
          нет + форматирования + здесь;
          // dart format on
        }

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

Обновление анализатора Dart и новых линтеров

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

Кроме того, в Dart 3.7 включены множество новых быстрых исправлений и средств помощи, включая такие как отсутствие ключевого слова await, неправильные префиксы импорта и нарушение правил линтеров (например, cascade_invocations).

Есть также инструменты для удобства рефакторинга кода, такие как преобразование блока else в else if, а также использование Expanded или Flexible для обёртки виджетов Flutter.> Дополнительная информация доступна здесь: https://github.com/dart-lang/sdk/blob/master/CHANGELOG.md#analyzer-1

Dart Web

Учитывая то, что основной библиотекой JavaScript теперь является dart:js_interop, а для браузерных API используется package:web, в версии Dart 3.7 было принято решение прекратить поддержку семи библиотек Dart SDK:

  • dart:html
  • dart:indexed_db
  • dart:js
  • dart:js_util
  • dart:web_audio
  • dart:web_gl

Увеличение продуктивности с помощью pub.dev

В декабре прошлого года Dart начал подсчет загрузок пакетов на pub.dev, а теперь эта функциональность была расширена до поддержки просмотра количества загрузок каждой версии пакета.

Эти данные могут помочь авторам пакетов понять, сколько пользователей уже обновили свои пакеты до последней версии (или только до последнего основного выпуска), что позволяет оценить ценность обратной совместимости с более ранними основными версиями пакета.

image image

Кроме того, pub.dev официально поддерживает темную тему:

image

Также был добавлен поиск по темам, где теперь на pub.dev представлено автоматическое завершение слов, аналогичное тому, которое используется в средах разработки. Это можно активировать при нажатии клавиш Ctrl + Space или при наборе соответствующего префикса (например, "topic:" или "license:").# В заключение

На данный момент Dart 3.7 выглядит как "обычная" версия, отличная от "недружественной" версии Flutter 3.29. Обновление или нет не оказывает значительного влияния, максимум это позволит использовать новые возможности форматирования.

Ссылки

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