
В этом году на конференции Google I/O 2026 команды Flutter и Dart отмечают важную тему: «Везде, каждый день, создано всеми, для всех».
Dart 3.12 воплощает эту идею в жизнь. Мы делаем язык более доступным и продуктивным. Лаконичные новые примитивы, такие как приватные именованные параметры, наряду с экспериментальной поддержкой основных конструкторов, делают повседневное программирование более чистым. Но мы не остановились на синтаксическом уровне. Новые функции, такие как Agentic Hot Reload и добавление Genkit в экосистему Dart, гарантируют, что вы сможете создавать высокопроизводительные, готовые к использованию ИИ и агентные приложения, которые будут доступны пользователям в любой точке мира. Это справедливо как для индивидуального программирования, так и для парного программирования с ИИ-агентом.
Так что вперед flutter upgrade, следуйте инструкциям, чтобы изучить новые возможности Dart 3.12. Но помните, что более мощный Dart — это только половина дела. Когда вы будете готовы увидеть, как эти функции преобразуются в красивый пользовательский интерфейс, ознакомьтесь с публикацией в блоге «Что нового во Flutter» или на Хабре.
Обновления языка
Частные именованные параметры
Инициализация формальных переменных в Dart с использованием this.синтаксиса конструктора невероятно удобна. Она напрямую сопоставляет параметр конструктора с полем класса. Это избавляет от необходимости писать повторяющийся код.
Но был один нюанс. Инициализация формальных параметров вызывала проблемы при сочетании именованных параметров с приватными полями. До Dart 3.12 язык не позволял именованному параметру начинаться с подчеркивания:
class Hummingbird { final String _petName; final int _wingbeatsPerSecond; // Compile error! Can't have private named parameter. :( Hummingbird({required this._petName, required this._wingbeatsPerSecond}); }
Вместо этого вам приходилось писать явный список инициализаторов:
class Hummingbird { final String _petName; final int _wingbeatsPerSecond; Hummingbird({required String petName, required int wingbeatsPerSecond}) : _petName = petName, _wingbeatsPerSecond = wingbeatsPerSecond; }
Это было утомительно. Список инициализаторов всего лишь удаляет _. Он добавлял ненужный шаблонный код в простые классы.
В Dart 3.12 язык может сделать это за вас. Теперь мы позволяем вам писать приватные именованные формальные инициализирующие конструкции:
class Hummingbird { final String _petName; final int _wingbeatsPerSecond; // OK with "Private Named Parameters"! :D Hummingbird({required this._petName, required this._wingbeatsPerSecond}); }
Этот код ведёт себя точно так же, как и предыдущий пример. Инициализированные поля являются приватными, но параметры конструктора и имена аргументов, записываемые в месте вызова, имеют соответствующие публичные имена:
void main() { print(Hummingbird(petName: 'Dash', wingbeatsPerSecond: 75)); }
Подробнее : Документация по приватным именованным параметрам .
Первичные конструкторы (экспериментальная фаза)
Мы рады представить вам предварительный обзор одной из самых востребованных синтаксических функций Dart. Первичные конструкторы представляют собой значительный шаг вперед в плане лаконичности классов. Они устраняют необходимость повторять имена полей и типы в теле класса и списках параметров.
Обычно даже простой класс, состоящий всего из двух полей, требует множества строк повторяющегося шаблонного текста:
class Point { final int x; final int y; Point(this.x, this.y); }
Первичные конструкторы полностью меняют ситуацию. Теперь вы можете заменить шаблонный код одной строкой, объявив параметры непосредственно в заголовочном файле класса.
class Point(final int x, final int y);
Эта функция идёт ещё дальше. Она вводит более короткий синтаксис для объявления конструкторов внутри тела класса с использованием ключевых слов new и factory. Она также позволяет классам с пустым телом заканчиваться простой точкой с запятой:
class Pet { String name; new() : name = 'Fluffy'; new withName(this.name); } class Dog extends Pet;
В Dart 3.12 в качестве экспериментальной предварительной версии запускаются основные конструкторы. Поскольку это фундаментальное изменение в способе определения классов Dart, ваши отзывы из реальной жизни крайне важны. Вы можете включить эту функцию, используя флаг primary-constructors при запуске вашего проекта:
dart run --enable-experiment=primary-constructors bin/main.dart
Если у вас возникнут какие-либо проблемы или замечания по дизайну, пожалуйста, создайте заявку в репозитории Dart SDK (и не стесняйтесь добавлять в копию @kallentu). Мы с нетерпением ждём ваших отзывов!
Подробнее : Документация по основным конструкторам .
Обновления экосистемы
Предварительный обзор Genkit Dart
Мы рады объявить о предварительном запуске Genkit Dart, фреймворка с открытым исходным кодом для создания полнофункциональных приложений на Dart и Flutter с поддержкой ИИ на любой платформе. Он предоставляет все необходимое для создания приложений с ИИ «из коробки»:
API, не зависящий от модели: поддерживает модели Google, Anthropic, OpenAI и совместимые с OpenAI.
Типобезопасность: Сочетает строгую систему типов Dart с
schematicпакетом для генерации и обработки строго типизированных данных.Запускайте где угодно: напишите логику ИИ один раз и запустите ее в бэкэнд-сервисе или непосредственно в вашем Flutter-приложении.
Пользовательский интерфейс разработчика: включает локальный веб-интерфейс для тестирования подсказок, просмотра трассировок и отладки рабочих процессов.
Основные примитивы ИИ: встроенная поддержка структурированного вывода, вызова инструментов и многоэтапных процессов.
Вызов нескольких моделей всего несколькими строками кода:
import 'package:genkit/genkit.dart'; import 'package:genkit_google_genai/genkit_google_genai.dart'; import 'package:genkit_anthropic/genkit_anthropic.dart'; void main() async { final ai = Genkit(plugins: [googleAI(), anthropic()]); // Call Google Gemini. final geminiResponse = await ai.generate( model: googleAI.gemini('gemini-flash-latest'), prompt: 'Hello from Gemini', ); // Call Anthropic Claude. final claudeResponse = await ai.generate( model: anthropic.model('claude-opus-4.6'), prompt: 'Hello from Claude', ); }
Пообщайтесь с командой Genkit в Discord и сообщите о любых проблемах на GitHub .
Узнайте больше : Краткое руководство по Genkit Dart .
Cloud Functions для Firebase и экспериментальная поддержка Dart.
Мы также рады сообщить о недавнем объявлении об экспериментальной поддержке Dart в Cloud Functions для Firebase. В течение многих лет расширение функциональности Flutter-приложения для облака означало переключение на другие языки программирования и дублирование структур данных.
Теперь вы можете создать по-настоящему унифицированное полнофункциональное приложение на Dart. Используя шаблон "Shared Package", вы можете напрямую обмениваться моделями данных, правилами валидации и бизнес-логикой между фронтендом и бэкендом, полностью исключая проблему "двойного документирования".
Благодаря компиляции Ahead-of-Time (AOT) в Dart, ваши бессерверные функции выигрывают от невероятно быстрого холодного запуска, обеспечивая мгновенное масштабирование и повышение производительности без необходимости использования Docker-файлов или настройки контейнеров.
Узнайте больше : статья в блоге о Dart и Firebase .
Обновления инструментов
Агентная горячая перезагрузка
Мы получили от нашего сообщества пожелания о бесперебойной работе агентов ИИ при использовании Dart и Flutter. Именно поэтому мы запускаем Agentic Hot Reload для приложений Dart и Flutter — новую функцию, разработанную для обеспечения бесперебойной работы вас и вашего агента программирования. Благодаря использованию сервера Dart MCP ваш агент программирования теперь может автоматически выполнять горячую перезагрузку, устраняя необходимость вручную искать и копировать URI подключения Dart Tooling Daemon (DTD).
В фоновом режиме демон Dart Tooling Daemon автоматически предоставляет информацию о подключении через команду CLI, выполняемую сервером MCP, что позволяет вашему агенту программирования мгновенно обнаруживать и подключаться к работающему приложению в вашем рабочем пространстве.
Благодаря отсутствию необходимости в настройке, эта интеграция оптимизирует ваши ежедневные рабочие процессы. Вы можете просто попросить своего агента по программированию исправить ошибку, изменить виджет пользовательского интерфейса или диагностировать сбой. Агент автоматически изменит ваш код, получит диагностические данные в режиме реального времени и перезагрузит приложение в режиме реального времени.

Анализ производительности сервера и диагностика.
Чтобы создать лучшие инструменты для всех, мы хотим понять производительность Dart Analysis Server (DAS) именно так, как вы её ощущаете на своём компьютере. Для этого мы ввели новую dart info record-performanceкоманду.
Разработчики, сталкивающиеся с медленной обработкой данных или зависанием автозавершения кода, могут использовать эту команду для сбора трассировок выполнения и данных профилирования ЦП из активных процессов DAS на своих машинах. Включение этих трассировок в ваши сообщения об ошибках на GitHub предоставляет нашей команде точные данные из реальной жизни, необходимые для диагностики и решения сложных проблем с производительностью. Делясь своими трассировками, вы напрямую помогаете нам сделать Dart быстрее и надежнее для каждого разработчика.
Обновления паба
Встроенная поддержка Git LFS в pub
Использование пакетов с большими файлами стало проще, чем когда-либо. Начиная с Dart 3.12, dart pubреализована встроенная поддержка зависимостей Git с использованием Git Large File Storage (LFS).
Вам не потребуется никаких дополнительных настроек в вашем pubspec.yamlфайле. Пока git lfs на вашем компьютере установлен pub-клиент, он всё обрабатывает автоматически:
dependencies: kittens: git: https://github.com/munificent/kittens.git
Это существенное улучшение для команд, управляющих версиями больших медиафайлов, моделей данных или бинарных файлов непосредственно в своих репозиториях Git.
Заключение
Dart 3.12 — это важная веха в устранении препятствий для разработчиков. От лаконичных дополнений к синтаксису до бесшовных рабочих процессов ИИ-агентств и более сильной экосистемы ИИ — этот релиз создан для вашей поддержки. Каждая функция разработана для того, чтобы сделать вашу повседневную разработку чистой и эффективной.
Мы с нетерпением ждём, что вы создадите с помощью этих новых возможностей. Надеемся, вы запустите программу flutter upgrade сегодня, чтобы опробовать эти обновления. Если вы тестируете наши экспериментальные функции, такие как основные конструкторы, пожалуйста, поделитесь своим мнением. Вместе мы продолжим создавать язык, который приносит радость разработчикам каждый день и везде.
Подробнее : Список изменений Dart SDK .