Не сказать, что этот год был насыщенным в плане внедрения новых фич в Dart, но это не значит, что команда разработчиков расслабила свои батоны и ничего не делает😎 Поэтому решил подвести некоторую черту под тем функционалом этого языка программирования, который находится на стадии внедрения в Dart SDK и чья спецификация была закончена, т.е. фича готова к реализации🤓
Активно пилятся, но полноценный релиз стоит ждать скорей всего не раньше 2026, т.к. фичи зависят друг от друга 🫡:
👉 Макросы
👉Аугментация
👉 Расширенный механизм part of Увидим в течении следующего года 👀:
👉 Wildcard variables (Dart 3.7) - разруливает множественное использование символа нижнего подчеркивания (конфликт имен переменных), т.е. предложение позволяет использовать более одного подстановочного знака без конфликтов имен в callback-функциях и при объявлении переменных
👉 enum-shorthands (Dart 3.8/x ?) - за счет выводимого типа в левой части выражения или текущего скоупа, позволяет не использовать имя перечисления при обращении к его свойствам, а также имя класса при обращении к константным и фабричным (именованным и нет) конструкторам и статическим полям и методам
Padding(
padding: const .all(8.0), // const EdgeInsets.all(8.0) // constructor
child: ...
)
int x = .parse(input); // Static method.
const String option = .fromEnvironment("my_option"); // Constructor
👉 Null-aware elements (Dart 3.8/9/x ?) - предлагает более простой формат проверки на null, что позволит заменить
Stack(
fit: StackFit.expand,
children: [
const AbsorbPointer(),
if (widget.child != null) widget.child!,
],
)
на
Stack(
fit: StackFit.expand,
children: [
const AbsorbPointer(),
?widget.child,
],
)
Спецификация завершена и фича готова к началу внедрения в Dart SDK ‼️:Здесь можно выделить одну фичу -
Unquoted imports. Она вносит
революцию в изменение в формат импортирования библиотек и пакетов:
// Before:
import 'dart:isolate';
import 'package:flutter_test/flutter_test.dart';
import 'package:path/path.dart';
import 'package:flutter/material.dart';
import 'package:analyzer/dart/ast/visitor/visitor.dart';
import 'package:widget.tla.server/server.dart';
import 'package:widget.tla.proto/client/component.dart';
// After:
import dart/isolate;
import flutter_test;
import path;
import flutter/material;
import analyzer/dart/ast/visitor/visitor;
import widget.tla.server;
import widget.tla.proto/client/component;