Этот релиз приносит обновления форматера, null-aware элементы для коллекций, новые возможности кросс-платформенной разработки, лучший способ находить трендовые пакеты на pub.dev, доступность горячей перезагрузки (hot reload) для веба и многое другое! Мы также надеемся, что найдутся разработчики, заинтересованные в участии в нашей программе раннего доступа к FFigen и JNIgen.
Обновления форматера
В предыдущем релизе Dart включал в себя в значительной степени переписанный форматер, который поддерживал новый «высокий» (tall) стиль. Релиз Dart 3.8 включает дополнительную обратную связь, исправления ошибок и другие улучшения.
Обратите внимание, что если вы обновитесь до Dart 3.8 SDK, ваше форматирование не изменится, пока вы не измените pubspec
вашего пакета, чтобы выбрать последнюю версию языка.
Висячие запятые и более "высокий" код
В предыдущих релизах висячая запятая принудительно разделяла окружающую конструкцию на несколько строк. Новый форматер теперь сам решает, следует ли разделять конструкцию, а затем добавляет или удаляет висячую запятую по мере необходимости.
// Форматер до изменений
TabBar(tabs: [Tab(text: 'A'), Tab(text: 'B')], labelColor: Colors.white70);
// Форматер после изменений
TabBar(
tabs: [
Tab(text: 'A'),
Tab(text: 'B'),
],
labelColor: Colors.white70,
);
Если вы предпочитаете старое поведение, вы можете снова включить его с помощью флага конфигурации.
Изменения стиля
Был внесен ряд изменений в стиль, которые делают вывод более компактным и улучшенным. Вот несколько примеров:
// Ранее выпущенный форматер (функции)
function(
name:
(param) => another(
argument1,
argument2,
),
);
// Форматер Dart 3.8 (функции)
function(
name: (param) => another(
argument1,
argument2,
),
);
// Ранее выпущенный форматер (переменные)
variable =
target.property
.method()
.another();
// Форматер Dart 3.8 (переменные)
variable = target.property
.method()
.another();
Кросс-компиляция
Появилась новая поддержка компиляции в нативные бинарные файлы Linux с машин разработки Windows, macOS и Linux. Вы можете сделать это с помощью команд dart compile exe
или dart compile aot-snapshot
и флагов --target-os
и --target-arch
.
// Пример кросс-компиляции для exe
$ dart compile exe --target-os=linux --target-arch=arm64
// Пример кросс-компиляции для aot-snapshot
$ dart compile aot-snapshot --target-os=linux --target-arch=arm64
Примеры использования:
Более быстрая компиляция для встраиваемых устройств (например, Raspberry Pi) на быстром ноутбуке разработчика, в отличие от менее мощного встраиваемого устройства.
Более быстрая компиляция для бэкенда на базе Linux на машине разработчика не на Linux.
Null-aware элементы
Новые null-aware элементы позволяют добавлять элементы в коллекцию (например, список, множество или карту), только если эти элементы не равны null
. Чтобы сделать элемент null-aware в литерале коллекции, добавьте перед ним префикс ?
.
Список без null-aware элементов, который удаляет значения null
:
// Код без null-aware элементов
var listWithoutNullAwareElements = [
if (promotableNullableValue != null)
promotableNullableValue,
if (nullable.value != null)
nullable.value!,
if (nullable.value case var value?)
value,
];
Список с null-aware элементами, который удаляет значения null
:
// Код с null-aware элементами
var listWithNullAwareElements = [
?promotableNullableValue,
?nullable.value,
?nullable.value,
];
Doc imports
Теперь поддерживаются "doc imports" — новый синтаксис на основе комментариев, который позволяет ссылаться на внешние элементы в комментариях к документации, фактически не импортируя их. Этот тег можно указать в комментарии к документации над директивой library
.
В следующем примере [Future]
и [Future.value]
импортируются из библиотеки dart:async
, но только для комментариев к документации:
/// @docImport 'dart:async';
library;
/// Комментарии к документации теперь могут ссылаться на такие элементы, как
/// [Future] и [Future.value] из `dart:async`,
/// даже если библиотека не импортирована с помощью
/// фактического импорта.
class Foo {}
Doc imports поддерживают те же стили URI, что и обычные импорты Dart, включая схему dart:
, схему package:
и относительные пути. Однако их нельзя откладывать (deferred) или настраивать с помощью as
, show
, hide
.
Трендовые пакеты на pub.dev
На главной странице pub.dev раздел «Самые популярные пакеты» заменен разделом «Трендовые пакеты». Этот новый раздел демонстрирует пакеты, которые недавно показали заметный рост внедрения и интереса со стороны сообщества.

(Изображение: Раздел трендовых пакетов на pub.dev)
Горячая перезагрузка для веба (Экспериментально)
Горячая перезагрузка с сохранением состояния (Stateful hot reload) теперь доступна для веба при использовании Dart Development Compiler (DDC). Переработанное JS-представление кода Dart позволяет заменять код в работающем приложении.
Работа над этой функцией все еще продолжается, но Dart 3.8 предоставляет первую возможность попробовать ее, начиная с приложений Flutter. См. пост в блоге Flutter для инструкций о том, как включить горячую перезагрузку.

(Изображение: Горячая перезагрузка Dart для веба с сохранением состояния)
Это была многолетняя работа, включавшая изменение представления типов времени выполнения, перепроектирование иерархий классов и обновление способа загрузки кода на страницу. Цель — достичь полного паритета с существующей реализацией горячей перезагрузки в VM (виртуальной машине). В почти всех случаях эта функция уже должна быть неотличима от того, к чему вы привыкли в VM. Все известные проблемы вы можете найти в трекере проблем.
Основное внимание уделяется тому, чтобы сделать эту функцию доступной сначала в приложениях Flutter, но в планах — интегрировать горячую перезагрузку в build_web_compilers
для использования в веб-приложениях, не относящихся к Flutter, позже.
Прямое нативное взаимодействие (Interoperability)
Мы рады запустить программу раннего доступа для FFigen и JNIgen — решений для генерации кода, предназначенных для упрощения интеграции с API нативных платформ. Мы ищем авторов плагинов Flutter, которые хотят разрабатывать или рефакторить плагины с помощью этих решений.
Чтобы узнать больше, прочтите пост в блоге под названием Путь Flutter к бесшовному взаимодействию. В нем рассказывается о наших стремлениях к прямому нативному взаимодействию, дорожной карте для их достижения и программе раннего доступа.
Заключение
Dart 3.8 — это свидетельство нашего постоянного стремления совершенствовать опыт разработки. Мы призываем вас изучить эти новые функции — от интеллектуального форматера и поддержки кросс-компиляции до null-aware элементов, горячей перезагрузки для веба и раннего доступа к нативному взаимодействию. Ваши идеи и вклад жизненно важны для постоянного роста Dart и Flutter, и мы с нетерпением ждем, какие приложения вы создадите.
Комментарии (14)
rutexd
25.05.2025 10:43Нативная компиляция - прямо нативная? Или просто встроили интерпретатор в ехе?
Overman775
Не густо. Такое ощущение что Flutter и Dart поставили на стоп
Octagon77
Не густо вестимо. А что поставили на стоп - у меня было первое впечатление.
Flutter занят следующим, после отказа от Skia, фундаментальным исправлением архитектуры - переносом большей части себя из потока в поток, ради лучшего взаимодействия с нативом. Такими вещами не занимаются когда стоп.
А Dart явно ищет себя вне Flutter, по тексту - на бэке, в браузере, и во взаимодействии с другими языками, что политически интересно, хотя всё это, особенно браузер, для Flutter тоже полезно.
Отсюда гипотеза - конфликт с командой Flutter мог быть вызван такой позицией Гугла - пока технические долги не отдадите, на новые прожекты денег не получите.
Но мысль, пришедшая после I/O в голову первой (зачем совершенствовать средства разработки когда уверен что AI по любому всё сделает?) пока не ушла.
milkyway044
Развитие Flutter и Dart продолжается, но восприятие зависит от ожиданий.
Чего конкретно вам не хватает?
Octagon77
Не хватает - это сложный для ответа вопрос когда простой - что не нравится.
Именно не хватает - чётко определённого места Flutter которое позволит понять чем он принципиально, то есть гарантированно на долгое время, отличается от огромного числа альтернатив, начиная с Tauri.
Мне не хватает темпов - как только обнаружилась фундаментальная архитектурная ошибка, нужно бросать всё и исправлять её ASAP, то есть Impeller и код в правильном потоке должны были быть в 2024 году, а "мы работаем и со временем" мне не нравится ибо "со временем" всегда включает и никогда.
Не хватает ясного понимания того, зачем Flutter Гуглу вообще, пока толковали про Fuchsia - можно было предполагать, а теперь выход со смартфонов Гугол вроде предполагает через Андроид, а прокатит с ИИ - может и отказаться от такового.
Использование Flutter - существенная инвестиция которая вся пойдёт прахом после любимого Гуглом действия - похорон проекта. Поэтому и восприятие такое.
Ну и по мелочи - 3D движка уровня хотя бы Bevy.
lil_master Автор
Если вы изучите этот вопрос очень глубоко, то обнаружите, что развитие экосистемы dart и flutter идёт в Большей степени благодаря усилию сообщества. Гугл не сможет похоронить flutter даже при желании.
Насчёт 3D движка - да, его не хватает, ещё не хватает фич по работе с ИИ, и мне не хватало именно той компиляции для линукса, которая появилась в этом обновлении, ещё не хватало горячей перезагрузки для веб, теперь она тоже появилась. Но сообщество - это не кто-то там эфимерный, который обязан ради наших хотелок прокачивать фреймворк новыми фичами, сообщество - это каждый из нас. Каждый из нас может вложить вклад в развитие 3D, например.
Flutter и Dart сейчас - не то что было в 2020 году, сейчас это большой проект и мощный инструмент, а по мере роста проекта все нововведения в него должны делаться осторожно и это замедляет скорость развития - это естественно и это не показатель упадка, а наоборот выход на плато стабильности.
Инвестиции - это всегда риск и этот риск зависит не только от вида технологий.
На сегодняшний день, Flutter - самая крутая бесплатная штука для кроссплатформы, а наши ожидания от скорости развития этой штуки - это только наши ожидания.
Octagon77
Может и изучу, см. ниже. А пока - немного недоумения.
Почему Гугол рассказывает о Flutter так, как если бы это был результат их и только их гения, а сообщества на видных местах, типа YouTube, я не вижу?
Кто принял решение о переносе кода в поток системы, решение стратегическое и притормаживающее всё остальное, Гугол или сообщество?
Сообщество, оставленное без хозяина, действительно может поддерживать проект в формально живом состоянии, типа Lazarus вместо Delphi или, мелькало недавно, не помню что вместо Silverlight. Но это как-то не вдохновляет. Flutter - это точно другое?
Как раз в 2020 я на Flutter относительно внимательно смотрел и решил пройти мимо этого странствующего балагана. Отсутствие энтузиазма со стороны Гугол пугает, но избыток пугал больше. Обязательно снова посмотрю, можно считать - прямо сейчас.
lil_master Автор
В целом я тоже такое наблюдаю, мое субъективное мнение - разногласия внутри гугла между командами разработчиков и типичный характер менеджеров: "когда флаттер все хвалят - он сразу гугловский, когда хулят - он бывший гугловский".
По поводу судьбы флаттера при полном отказе поддержки со стороны гугла высказался главный разработчик флаттера и он дал очень объективную точку зрения, а именно - численность сообщества находится на той грани когда нельзя однозначно сказать о самодостаточном развитии в будущем, с тех пор прошло некоторое время, многие ожидали закат флаттера, но заката не произошло, а идет медленное развитие и внедрение минорных и средних улучшений. Будущее всё покажет, но учитывая широкую кроссплатформенность, бесплатность, производительность близкую к нативной, низкий порог входа - ИИ первым схватит эту технологию для захвата мира, так что может быть не гугл похоронит флаттер, а флаттер похоронит гугл и может быть всех нас)
milkyway044
Похоже, вам не хватает клятвы Google в вечной любви.
Как по мне, Flutter уже в текущем виде позволяет создавать качественные приложения.
Обновления нужны под платформы и сторы, остальное — ваши экзистенциальные страдания.
Octagon77
Качественные приложения - да, если это очередная скроллилка ниочём или очередная формочка. Чуть сложнее - и нужно понижать на ступень, не "качественные", а "неплохие" или "вполне работоспособные".
Я только что попробовал Flutter на Arch и для десктопа - итог плачевный:
Всё по инструкции, но ушат помоев при первом же прикосновении.
Причина - как посмотреть, либо в инструкции отсутствует как пререквизит то, что на Arch в пакете extra/xdg-desktop-portal-gtk, перезагрузка нужна (это отравляющее влияние мусора именуемого Flatpack на весь Линукс), либо, если по гамбургскому счёту, намёк на то, что использование GTK, вместе с оборзелым
на сайте и там же гордым, но в свете предыдущей цитаты лживым,
закончится тем, что выкидывание GTK будет следующей, после Skia и потока, исправляемой базовой архитектурной ошибкой.
А так да, Flutter стал вполне себе, разве что свернул не туда - занялся мимикрией под натив без натива. Кроссплатформе этим занимающейся никогда с нативом не сравниться - это непробиваемый потолок. А у кроссплатформы, не стесняющейся показать что она рисует сама, скажем через Web. потолка нет, но есть ниша, что нормально - в IT серебряных пуль не бывает. Это не моё мнение, это когда Flutter пользовался успехом, большим чем объективно заслуживал по качеству, один аналитик, которому я поверил но имени не запомнил, так этот феномен объяснял.
А качественные приложения и без Flutter, и особенно Dart не уча, и на JavaScript можно. Tauri forever.
Такие вот страдания...
lil_master Автор
еще не дочитав до конца я про себя подумал "эх зря он это сделал"
Флаттер работает на паре тройке дистрибутивов нормально (на убунте 20 и 22 пробовал), но не супер стабильно, но, откровенно говоря - это не проблема флаттера, почему к примеру на некоторых серверах идут сразу сборки линукс ос + софт к этой ос? потому что линуксов 100500 видов, если хотите поюзать флаттер - попробуйте на винде, а еще лучше - на маке, на маке - полный кайф.
milkyway044
Google Ads, Alibaba, Kijiji, The New York Times, My BMW, Toyota App, Reflectly с миллионами пользователей — «скроллилки» и «формочки»?
Octagon77
Законодательно запрещено разжигать... ммм... вот сухой корм, который с восторгом кушкают миллионы питомцев, это Haute Cuisine?
milkyway044
Ваше право, пилите что хотите на чем душа лежит.