Сегодня мы рады объявить о выпуске Dart 3.10!
В этом выпуске мы продолжаем работать над улучшением базового опыта разработки. Новая функция сокращённых обозначений ( .) поможет вам писать более читабельный и менее многословный код. Мы также представляем мощную систему плагинов-анализаторов , которая позволяет создавать собственные правила статического анализа, интегрируемые непосредственно в вашу IDE. И мы рады сообщить, что хуки сборки теперь стабильны!
В этом выпуске также реализован ряд улучшений pub.dev и управления пакетами. Вы найдёте новые возможности поиска на вкладке «Нравится» в своём профиле, а авторы пакетов теперь могут отключить ручную публикацию для повышения безопасности. Наконец, мы добавили набор новых, более точных аннотаций об устаревании , чтобы вы могли более точно контролировать развитие своего API.
Продолжайте читать, чтобы узнать больше об этих и других улучшениях в Dart 3.10.
Обновления языка
Сокращения точек ?
В Dart 3.10 представлены сокращения с точкой ( .) (на Хабре на русском). Эта новая функция позволяет опускать избыточные имена классов или перечислений, когда компилятор может определить тип из контекста.
Давайте рассмотрим распространённый сценарий: ведение журнала. Раньше вы могли бы написать:
enum LogLevel { info, warning, error, debug }
void logMessage( String message, {LogLevel level = LogLevel.info}) {
// ... реализация
}
// Где-то еще в вашем приложении
logMessage( 'Не удалось подключиться к базе данных' , level: LogLevel.error);
Поскольку levelпараметр уже ожидает LogLevel, повторять имя перечисления не нужно. Используя сокращения с точкой, теперь можно записать:
enum LogLevel { info, warning, error, debug }
void logMessage( String message, {LogLevel level = .info}) {
// ... реализация
}
// Где-то еще в вашем приложении
logMessage( 'Не удалось подключиться к базе данных' , level: .error);
Теперь код фокусируется на значении ( .error), а не на типе ( LogLevel).
Сокращения Dot подходят не только для перечислений. Вы также можете использовать их с конструкторами, статическими методами и статическими полями. Подробнее см. в нашем руководстве по сокращениям Dot (на Хабре на русском).
Обновления инструментов
Плагины анализатора ?
Вы когда-нибудь задумывались, просматривая код: «Разве анализатор не должен это отследить?». Теперь он может.
В Dart 3.10 представлена новая мощная система плагинов для анализатора Dart. Она позволяет создавать и использовать собственные правила статического анализа, которые интегрируются непосредственно в IDE и инструменты командной строки, такие как dart analyze. Плагины анализатораflutter analyze можно использовать для:
Обеспечьте соблюдение правил, специфичных для проекта, таких как специальные проверки и предупреждения, чтобы поддерживать соглашения в кодовой базе вашей команды.
Избегайте распространенных ошибок и применяйте передовые практики, характерные для вашей сферы.
Автоматизируйте изменения кода, предоставляя быстрые исправления и средства для автоматического устранения проблем или перехода на новые API.
Эта новая система является результатом значительных архитектурных усилий по созданию богатой экосистемы инструментов, поддерживаемых сообществом, и мы хотели бы выразить особую благодарность участнику сообщества Фелипе Моршелю за его ценные исправления и функции для анализатора в целом.
Чтобы использовать плагин анализатора, просто добавьте его в файл analysis_options.yaml :
analyzer:
plugins:
- some_plugin
- another_plugin
Более подробную информацию о создании собственных правил см. в документации по написанию плагина-анализатора .
Создавайте хуки ?
Интеграция нативного кода (например, C++, Rust или Swift) в пакет Dart часто требовала управления сложными, платформенно-зависимыми файлами сборки, такими как CMake или Gradle. С Dart 3.10 этот процесс значительно упростился.
Мы рады сообщить, что сборочные хуки (ранее известные как нативные ресурсы) теперь стабильны. Вы можете использовать эти хуки для компиляции нативного кода или загрузки нативных ресурсов (например, динамических библиотек) и их интеграции непосредственно в пакет Dart. Эта мощная возможность позволяет повторно использовать существующий нативный код или библиотеки из вашего пакета и устраняет необходимость в написании отдельных сборочных файлов, таких как SPM, Gradle или CMake, для разных операционных систем.
Чтобы узнать больше, ознакомьтесь с документацией по написанию хука сборки или посмотрите эпизод шоу Flutter Build, посвященный хукам сборки.
Удалить устаревшие ссылки ?
При выпуске новой основной версии пакета (например, 1.0.0 или 0.2.0) рекомендуется удалить все API, которые вы ранее отметили как устаревшие. Это сохранит чистоту пакета и предотвратит использование разработчиками устаревшего кода. Однако этот шаг легко забыть в процессе выпуска.
Чтобы помочь вам, мы ввели новый lint: remove_deprecations_in_breaking_versions. Этот lint обнаруживает оставшиеся устаревшие элементы при обновлении пакета до новой версии, которая является критически важной. Отмечая такие случаи, lint помогает гарантировать, что API вашего пакета остаётся современным и понятным для пользователей.

remove_deprecations_in_breaking_versions lint example@Устаревшая аннотация ⬆️
Существующая аннотация @Deprecated — грубый инструмент. Она информирует разработчиков о том, что API больше не рекомендуется, но не учитывает нюансы. Например, как сообщить, что класс больше не следует расширять, но его экземпляр всё ещё можно создавать?
Чтобы предоставить авторам пакетов более точный контроль над развитием своего API, Dart 3.10 вводит набор новых, более конкретных аннотаций об устаревании.
Теперь вы можете отменить определенные варианты использования классов и миксинов:
@Deprecated.extend() : Возможность расширения класса устарела.
@Deprecated.implement() : Возможность реализации класса или миксина устарела.
@Deprecated.subclass() : Возможность создания подклассов (расширения или реализации) класса или миксина устарела.
@Deprecated.mixin() : Возможность смешивания в классе устарела.
@Deprecated.instantiate() : Возможность создания экземпляра класса устарела.
Кроме того, теперь вы можете сигнализировать о том, что необязательный параметр станет обязательным в будущей версии, используя @Deprecated.optional() .
Обновления паба (Pub)
Поддержка поиска, сортировки и различий для ваших любимых пакетов ?
Управление любимыми пакетами на pub.dev значительно обновлено. Вы можете делать это через функцию поиска или вкладку «Нравится» в вашем профиле. Теперь вы можете искать, сортировать и фильтровать понравившиеся пакеты с помощью тех же привычных элементов управления, что и для обычного поиска. Это включает сортировку по количеству лайков, очкам публикации и популярности. Мы также улучшили интерфейс для удаления понравившихся пакетов, что упрощает поддержание списка понравившихся пакетов в порядке и актуальности.

Если вы решили искать понравившиеся пакеты с помощью функции поиска, просто добавьте ее is:liked-by-meв свой запрос.

Возможность включить или отключить ручную публикацию ?
Для повышения безопасности и предотвращения случайных публикаций теперь можно отключить ручную публикацию (публикацию методом pub). Это идеально подходит для пакетов с автоматизированным процессом публикации или пакетов, которые больше не публикуются активно.
Отключая ручную публикацию, вы предотвращаете использование персональных учетных данных для обновления пакетов, что снижает риск несанкционированного или случайного выпуска.
Вы можете управлять этой функцией на вкладке «Администрирование» вашего пакета, используя флажок «Включить ручную публикацию».

Итого
В версии Dart 3.10 реализовано множество улучшений, направленных на повышение производительности труда разработчиков, инструментария и общего состояния экосистемы пакетов. Мы надеемся, что эта версия позволит вам создавать ещё более качественные приложения: от таких языковых функций, как сокращения с точками, которые делают код более лаконичным, до мощных новых инструментов, таких как плагины-анализаторы и стабильные хуки сборки.
Мы невероятно признательны всем инженерам и командам, которые внесли свой вклад в этот релиз, и выражаем особую благодарность участникам нашего сообщества, которые помогают сделать Dart лучше для всех.
Мы с нетерпением ждем ваших проектов с Dart 3.10. Чтобы начать работу, вы можете получить Dart 3.10 SDK уже сегодня. Полный список всех новых и обновлённых функций можно найти в журнале изменений Dart SDK .