Этот релиз приносит обновления форматера, 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)


  1. Overman775
    25.05.2025 10:43

    Не густо. Такое ощущение что Flutter и Dart поставили на стоп


    1. Octagon77
      25.05.2025 10:43

      Не густо вестимо. А что поставили на стоп - у меня было первое впечатление.

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

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

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

      Но мысль, пришедшая после I/O в голову первой (зачем совершенствовать средства разработки когда уверен что AI по любому всё сделает?) пока не ушла.


    1. milkyway044
      25.05.2025 10:43

      Развитие Flutter и Dart продолжается, но восприятие зависит от ожиданий.

      Чего конкретно вам не хватает?


      1. Octagon77
        25.05.2025 10:43

        Не хватает - это сложный для ответа вопрос когда простой - что не нравится.

        Именно не хватает - чётко определённого места Flutter которое позволит понять чем он принципиально, то есть гарантированно на долгое время, отличается от огромного числа альтернатив, начиная с Tauri.

        Мне не хватает темпов - как только обнаружилась фундаментальная архитектурная ошибка, нужно бросать всё и исправлять её ASAP, то есть Impeller и код в правильном потоке должны были быть в 2024 году, а "мы работаем и со временем" мне не нравится ибо "со временем" всегда включает и никогда.

        Не хватает ясного понимания того, зачем Flutter Гуглу вообще, пока толковали про Fuchsia - можно было предполагать, а теперь выход со смартфонов Гугол вроде предполагает через Андроид, а прокатит с ИИ - может и отказаться от такового.

        Использование Flutter - существенная инвестиция которая вся пойдёт прахом после любимого Гуглом действия - похорон проекта. Поэтому и восприятие такое.

        Ну и по мелочи - 3D движка уровня хотя бы Bevy.


        1. lil_master Автор
          25.05.2025 10:43

          Использование Flutter - существенная инвестиция которая вся пойдёт прахом после любимого Гуглом действия - похорон проекта. Поэтому и восприятие такое.

          Если вы изучите этот вопрос очень глубоко, то обнаружите, что развитие экосистемы dart и flutter идёт в Большей степени благодаря усилию сообщества. Гугл не сможет похоронить flutter даже при желании.

          Насчёт 3D движка - да, его не хватает, ещё не хватает фич по работе с ИИ, и мне не хватало именно той компиляции для линукса, которая появилась в этом обновлении, ещё не хватало горячей перезагрузки для веб, теперь она тоже появилась. Но сообщество - это не кто-то там эфимерный, который обязан ради наших хотелок прокачивать фреймворк новыми фичами, сообщество - это каждый из нас. Каждый из нас может вложить вклад в развитие 3D, например.

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

          Инвестиции - это всегда риск и этот риск зависит не только от вида технологий.

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


          1. Octagon77
            25.05.2025 10:43

            Если вы изучите этот вопрос очень глубоко, то обнаружите, что развитие экосистемы dart и flutter идёт в Большей степени благодаря усилию сообщества. Гугл не сможет похоронить flutter даже при желании.

            Может и изучу, см. ниже. А пока - немного недоумения.

            Почему Гугол рассказывает о Flutter так, как если бы это был результат их и только их гения, а сообщества на видных местах, типа YouTube, я не вижу?

            Кто принял решение о переносе кода в поток системы, решение стратегическое и притормаживающее всё остальное, Гугол или сообщество?

            Сообщество, оставленное без хозяина, действительно может поддерживать проект в формально живом состоянии, типа Lazarus вместо Delphi или, мелькало недавно, не помню что вместо Silverlight. Но это как-то не вдохновляет. Flutter - это точно другое?

            Flutter и Dart сейчас - не то что было в 2020 году

            Как раз в 2020 я на Flutter относительно внимательно смотрел и решил пройти мимо этого странствующего балагана. Отсутствие энтузиазма со стороны Гугол пугает, но избыток пугал больше. Обязательно снова посмотрю, можно считать - прямо сейчас.


            1. lil_master Автор
              25.05.2025 10:43

              Почему Гугол рассказывает о Flutter так, как если бы это был результат их и только их гения, а сообщества на видных местах, типа YouTube, я не вижу?

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

              По поводу судьбы флаттера при полном отказе поддержки со стороны гугла высказался главный разработчик флаттера и он дал очень объективную точку зрения, а именно - численность сообщества находится на той грани когда нельзя однозначно сказать о самодостаточном развитии в будущем, с тех пор прошло некоторое время, многие ожидали закат флаттера, но заката не произошло, а идет медленное развитие и внедрение минорных и средних улучшений. Будущее всё покажет, но учитывая широкую кроссплатформенность, бесплатность, производительность близкую к нативной, низкий порог входа - ИИ первым схватит эту технологию для захвата мира, так что может быть не гугл похоронит флаттер, а флаттер похоронит гугл и может быть всех нас)


        1. milkyway044
          25.05.2025 10:43

          Похоже, вам не хватает клятвы Google в вечной любви.

          Как по мне, Flutter уже в текущем виде позволяет создавать качественные приложения.

          Обновления нужны под платформы и сторы, остальное — ваши экзистенциальные страдания.


          1. Octagon77
            25.05.2025 10:43

            Качественные приложения - да, если это очередная скроллилка ниочём или очередная формочка. Чуть сложнее - и нужно понижать на ступень, не "качественные", а "неплохие" или "вполне работоспособные".

            Я только что попробовал Flutter на Arch и для десктопа - итог плачевный:

            CRITICAL **: 21:19:35.745: Failed to read XDG desktop portal settings: GDBus.Error:or
            g.freedesktop.portal.Error.NotFound: Requested setting not found

            Всё по инструкции, но ушат помоев при первом же прикосновении.

            Причина - как посмотреть, либо в инструкции отсутствует как пререквизит то, что на Arch в пакете extra/xdg-desktop-portal-gtk, перезагрузка нужна (это отравляющее влияние мусора именуемого Flatpack на весь Линукс), либо, если по гамбургскому счёту, намёк на то, что использование GTK, вместе с оборзелым

            Flutter supports Debian 11 or later and Ubuntu 22.04 or later LTS

            на сайте и там же гордым, но в свете предыдущей цитаты лживым,

            Build for any screen

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

            А так да, Flutter стал вполне себе, разве что свернул не туда - занялся мимикрией под натив без натива. Кроссплатформе этим занимающейся никогда с нативом не сравниться - это непробиваемый потолок. А у кроссплатформы, не стесняющейся показать что она рисует сама, скажем через Web. потолка нет, но есть ниша, что нормально - в IT серебряных пуль не бывает. Это не моё мнение, это когда Flutter пользовался успехом, большим чем объективно заслуживал по качеству, один аналитик, которому я поверил но имени не запомнил, так этот феномен объяснял.

            А качественные приложения и без Flutter, и особенно Dart не уча, и на JavaScript можно. Tauri forever.

            Такие вот страдания...


            1. lil_master Автор
              25.05.2025 10:43

              Я только что попробовал Flutter на Arch и для десктопа

              еще не дочитав до конца я про себя подумал "эх зря он это сделал"

              Флаттер работает на паре тройке дистрибутивов нормально (на убунте 20 и 22 пробовал), но не супер стабильно, но, откровенно говоря - это не проблема флаттера, почему к примеру на некоторых серверах идут сразу сборки линукс ос + софт к этой ос? потому что линуксов 100500 видов, если хотите поюзать флаттер - попробуйте на винде, а еще лучше - на маке, на маке - полный кайф.


            1. milkyway044
              25.05.2025 10:43

              если это очередная скроллилка ниочём или очередная формочка

              Google Ads, Alibaba, Kijiji, The New York Times, My BMW, Toyota App, Reflectly с миллионами пользователей — «скроллилки» и «формочки»?


              1. Octagon77
                25.05.2025 10:43

                Законодательно запрещено разжигать... ммм... вот сухой корм, который с восторгом кушкают миллионы питомцев, это Haute Cuisine?


                1. milkyway044
                  25.05.2025 10:43

                  Ваше право, пилите что хотите на чем душа лежит.


  1. rutexd
    25.05.2025 10:43

    Нативная компиляция - прямо нативная? Или просто встроили интерпретатор в ехе?