12 августа вышел Dart 3.13.
Главная фишка релиза — Primary Constructors.
Теперь вместо привычного:
class Point {
int x;
int y;
Point(this.x, this.y);
}можно писать:
class Point(var int x, var int y);
Меньше кода — та же семантика.
🧩 А если нужен initializer или body?
Можно добавить
this body:class Point(var int x, var int y) {
this : assert(x >= 0) {
print('Point created at $x, $y');
}
}Кроме того, Dart теперь позволяет писать конструкторы внутри класса без повторения имени класса:
class Point {
int x, y;
new(this.x, this.y);
new origin() : x = 0, y = 0;
factory clone(Point other) => Point(other.x, other.y);
}Чтобы использовать Primary Constructors, SDK constraint должен быть 3.13+:
environment:
sdk: ^3.13.0
🧠 Analyzer стал умнее
Dart 3.13 добавляет новые возможности LSP:
• Inline Values — значения переменных прямо во время debugging
• поддержка Flutter Widget Preview
• интеграция Analysis Server с Dart Tooling Daemon
То есть IDE получает больше информации непосредственно от Dart analyzer.
🧹 Новые lint rules
Появились новые проверки, среди которых:
async_return_with_no_awaitempty_container_bodiesinitialize_in_field_declarationunnecessary_const_in_enum_constructorunnecessary_primary_constructor_bodyunnecessary_type_name_in_constructoruse_declaring_parametersА экспериментальный:
use_primary_constructors
может рекомендовать переход на новый синтаксис primary constructors.
⚡️ Новое в
dart:isolateПоявились API для более низкоуровневого управления isolate и event loop:
Isolate.runSync
Isolate.create
Isolate.shutdownSync
Isolate.pinToCurrentThread
Isolate.runEventLoopSync
Isolate.onEvent
Isolate.handleEvent
Это уже особенно интересно разработчикам высокопроизводительных приложений и тем, кто работает с concurrency на низком уровне.
📦 Новые возможности коллекций
В
dart:core:List.unmodifiableOf(...)
Map.unmodifiableOf(...)
Плюс новые эффективные операции для подсчёта битов у
int:trailingZeroBitCount
oneBitCount
🌐 JavaScript / Web interop
JSFunction и JSExportedDartFunction теперь generic.Появился:
JSObject.getPrototypeOf()
Это продолжает общую тенденцию Dart — постепенно делать JS/Web interop более типобезопасным.
📦 Pub и CLI тоже получили апдейты
Например:
dart pub workspace list
теперь позволяет посмотреть пакеты workspace и их директории, в том числе в JSON.
А
dart build cli получил cross-compilation:dart build cli --target-os ... --target-arch ...
То есть Dart CLI становится всё более полноценным инструментом для создания и распространения native-приложений.
⚠️ Но есть breaking changes
В Dart 3.13 есть несколько изменений, которые могут потребовать правок в существующем коде.
Например, изменился тип возвращаемых значений
NetworkInterface.addresses, а работа с некоторыми файловыми timestamp теперь сохраняет microsecond precision.Также изменено поведение type promotion, чтобы избежать потенциально unsound поведения.
Поэтому для крупных проектов перед обновлением лучше посмотреть changelog.
Главное впечатление от Dart 3.13:
Dart не пытается устроить революцию. Он делает язык короче, строже и удобнее.
И особенно хорошо это видно по Primary Constructors:
// было
class User {
final int id;
final String name;
User(this.id, this.name);
}
// стало
class User(var int id, var String name);
Для Flutter-проектов с большим количеством моделей это потенциально очень приятное сокращение boilerplate.
#flutter #dart #FlutterPulse #FlutterPulseNews