(!) Дата релиза этого обновления: 13 августа 2025. Это плановый, «прикладной» апдейт, который делает анализатор умнее, CLI — ощутимо быстрее, pub — точнее в разрешении зависимостей, а также приносит официальный MCP-сервер для интеграции Dart/Flutter с ИИ-ассистентами. Ниже — только существенное, с примерами и пошаговыми рекомендациями. (Dart)
Основное
1) Анализатор «понимает» null-safety глубже
В Dart 3.9 механики type promotion / reachability / definite assignment работают с учётом null-safety по умолчанию. Итог: больше точных предупреждений об «мёртвом коде» и лишних проверках на null. Чтобы задействовать улучшения, установите нижнюю границу SDK ^3.9.0. (Dart)
# pubspec.yaml
environment:
sdk: ^3.9.0
Мини-пример пользы (анализатор отловит недостижимую ветку):
int? n;
if (n == null) return;
// Ниже n гарантированно non-null, лишний if будет подсвечен:
if (n != null) print(n.isEven); // dead_code / избыточная проверка
print(n.isEven);
2) CLI заметно быстрее
dart analyze, dart fix и другие команды теперь запускают AOT-снимок analysis server вместо JIT-подготовки перед каждым вызовом. На реальных пакетах команда dart analyze ускоряется примерно до ~1.5×; короткие команды — ещё заметнее. (Dart)
3) MCP-сервер для Dart/Flutter (интеграция с ИИ-ассистентами)
Появился Dart and Flutter MCP Server — мост между проектом и совместимыми ассистентами (Gemini CLI, GitHub Copilot, Cursor и др.). Ассистент получает безопасный доступ к контексту проекта и стандартным действиям: исправление ошибок, управление зависимостями, форматирование, запуск тестов и прочее. Статус — experimental, требуется Dart 3.9+. (Dart)
Мини-старт:
# Пример для совместимого клиента: команда MCP-сервера — `dart mcp-server`
dart mcp-server
4) Pub стал точнее и дисциплинированнее
Git-зависимости теперь можно «решать» по git-тегам через
tag_pattern— полезно, если релизы маркируются тегамиvX.Y.Z. (Dart)В корневом пакете с Dart 3.9 учитывается верхняя граница
flutter: можно закрепить команду на конкретной версии Flutter, иpub getупадёт при несоответствии SDK. (Dart)
# pubspec.yaml — пример git + tag_pattern и жёсткая привязка Flutter
environment:
sdk: ^3.9.0
flutter: 3.35.0
dependencies:
my_dependency:
git:
url: https://github.com/example/my\_dependency
tag_pattern: v{{version}}
version: ^2.0.1
5) Компилятор: кросс-компиляция и архитектуры
Добавлена кросс-компиляция на Linux для arm (ARM32) и riscv64, улучшена документация по dart compile; при этом x86 32-бит объявлена устаревшей (deprecated) — затрагивает главным образом старые эмуляторы. (Dart)
Детали и нюансы
Улучшения soundness в dartdevc
Исправлена уязвимость, при которой значение, возвращаемое геттером с типовым параметром, «заводилось» как вызываемое без нужных рантайм-проверок — редкий, но принципиальный случай. (Dart)
Новые линты по умолчанию (рекомендуемые к включению)
switch_on_type— не переключаться поType, вместо этого использовать сопоставление с образцом (patterns). (Dart)unnecessary_unawaited— не оборачивать вunawaited()то, что помечено аннотацией@awaitNotRequired. (Dart)
# analysis_options.yaml
linter:
rules:
- switch_on_type
- unnecessary_unawaited
Короткий пример для switch_on_type:
// Плохо:
switch (o.runtimeType) { case int: ... }
// Хорошо:
switch (o) {
case int(): ...
case String _: ...
default: ...
}
Практическая ценность для команд
Меньше скрытых дефектов
Null-safety-aware анализ ловит «мёртвые» ветки и лишние проверки уже на этапеanalyze, что упрощает ревью и снижает риск регрессий. (Dart)Быстрее циклы разработки
AOT-снимок analysis server уменьшает «трение» при частых локальных проверках (analyze,fix). Это особенно чувствуется в монорепозиториях и больших Flutter-проектах. (Dart)Более предсказуемые зависимости
tag_patternв git-зависимостях исключает случайные коммиты вне релизных тегов; верхняя границаflutterв корне синхронизирует рабочих разработчиков на одинаковом SDK. (Dart)Интеграция с ИИ-инструментами
MCP-сервер даёт ассистентам «легальную» видимость проекта и операции вроде «исправь runtime-ошибку», «подбери пакет под задачу», «обнови зависимости». Для сложных кодовых баз это уже экономит часы. (Dart)Покрытие новых платформ
Поддержка кросс-компиляции на Linux-arm/riscv64пригодится для edge/встраиваемых сценариев и серверов на RISC-V. При этом 32-битный x86 считается устаревшим — планируйте обновление эмуляторов. (Dart)
Что сделать прямо сейчас (чек-лист)
Обновить SDK-границы
Вpubspec.yaml:sdk: ^3.9.0(и при необходимостиflutter: <Ваша_версия>). Затемdart pub upgrade. (Dart)Включить полезные линты
Добавьтеswitch_on_typeиunnecessary_unawaitedвanalysis_options.yaml. Прогонитеdart analyze+dart fix --apply. (Dart)Ускорить рутину
Перейдите на новые CLI-бинарии (они входят в SDK 3.9). Оцените выигрыш на Вашем репозитории (time dart analyze). (Dart)Навести порядок в git-зависимостях
Если релизы размечаются тегами, добавьтеtag_patternв соответствующие записи зависимостей. (dart.googlesource.com)Попробовать MCP-сервер
Если используете ассистента (Gemini CLI / Copilot / Cursor), пропишите запускdart mcp-serverв настройках клиента и протестируйте сценарии «исправь layout-ошибку», «добавь пакет и обнови код». (Dart)
Короткие ответы на типичные вопросы
Ломает ли обновление существующий код?
Как правило — нет. Возможны новые предупреждения (dead_code, линты), которые стоит поправить. (Dart)Нужно ли мигрировать все пакеты?
Достаточно поднятьenvironment.sdkдо^3.9.0в целевых пакетах; сторонние зависимости продолжают работать, но рекомендуйте авторам протестировать на 3.9 для новой диагностики. (Dart)Как понять, поддерживается ли мой целевой рантайм?
Для Linux теперь проще собирать подarm/riscv64с хоста x64; x86-32 считается устаревшим. Актуальные команды — на страницеdart compile. (Dart)
Вывод
Dart 3.9 — это реальная экономия времени и снижение «шума» в кодовой базе: быстрейшие проверки, умнее null-анализ, дисциплина в зависимостях, плюс официальный канал для «осмысленных» действий ИИ-ассистента в Вашем проекте. Если Вы регулярно запускаете dart analyze/fix, держите git-зависимости или смотрите в сторону RISC-V/ARM Linux — обновляться стоит сразу. (Dart)
Источники
Официальный анонс Dart 3.9 (язык, CLI, MCP, pub, архитектуры) (Dart)
«What’s new»: точная дата релиза, обновления документации (ARM/RISC-V, MCP) (Dart)
SDK Changelog 3.9.0: детали линтов, git-теги в pub, soundness-фикс в DDC (dart.googlesource.com)
Линты switch_on_type и unnecessary_unawaited (описание и примеры) (Dart)
Страница dart compile (актуальные сведения по компиляции) (Dart)
AuToMaton
Что ещё плохого кроме жидкого стекла случилось с Flutter что нужно пиарить его через протухшее обновление?
Типа совет
Если статья об обновлении Dart версии n.m не вышла за три (3) дня после обновления, ждите обновления до версии n.(m+1).
lil_master Автор
Я заметил, что на хабре не было публикаций фич, которые были внесены в дарт 3.9, а тем более с разбором примеров.
В начале статьи указано к какой дате относится обновление, чтобы читатель мог понять своевременность обновления.
Дарт - не флаттер, фичи языка и фреймворка - не одно и тоже.
Flutter - отличный фреймворк, если не шарите - оставьте ваше мнение и советы при себе, да поглубже, и залейте жидким стеклом, чтобы иногда не вываливались.