Что такое const конструктор в Dart?

«Что такое const конструктор в Dart?» — вопрос из категории Dart Core, который задают на 29% собеседований Flutter Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Const конструктор в Dart создаёт объекты, которые являются неизменяемыми (immutable) и вычисляются на этапе компиляции. Это позволяет компилятору кэшировать и повторно использовать идентичные экземпляры, что экономит память и повышает производительность.

Ключевые условия для использования const конструктора:

  • Все поля класса должны быть объявлены как final.
  • Сам класс должен быть неизменяемым.

Пример:

class ImmutablePoint {
  final double x;
  final double y;

  const ImmutablePoint(this.x, this.y);
}

void main() {
  const point1 = ImmutablePoint(5.0, 10.0); // Создаётся в compile-time
  const point2 = ImmutablePoint(5.0, 10.0); // Используется кэшированный экземпляр

  print(identical(point1, point2)); // true — это один и тот же объект в памяти

  // Сравнение с обычным конструктором:
  final point3 = ImmutablePoint(5.0, 10.0);
  final point4 = ImmutablePoint(5.0, 10.0);
  print(identical(point3, point4)); // false — разные объекты
}

Практическое применение во Flutter: Const конструкторы активно используются в виджетах Flutter для оптимизации перестроений. Например, Text, SizedBox, Padding имеют const конструкторы, что позволяет Flutter избегать лишних ререндеров при создании неизменяемых виджетов.