Когда в Dart (Flutter) лучше использовать ключевое слово const?

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

Ответ

В Dart и Flutter я использую const для создания констант времени компиляции. Это не только про неизменяемость, но и про производительность.

Основные случаи использования:

  1. Виджеты и их параметры: Если виджет и все его дочерние виджеты могут быть const, Flutter может не перестраивать их при ребилде дерева. Это критично для производительности.

    // Хорошо - всё const
    const SizedBox(
      width: 16.0,
      child: const Text('Заголовок', style: const TextStyle(fontSize: 14)),
    );
    
    // Плохо - виджет будет пересоздаваться каждый раз
    SizedBox(
      width: 16.0,
      child: Text('Заголовок', style: TextStyle(fontSize: 14)),
    );
  2. Константные коллекции и значения: Для неизменяемых списков, карт, цветов, стилей, которые используются в нескольких местах.
    static const List<String> supportedLanguages = ['en', 'ru'];
    static const defaultPadding = const EdgeInsets.all(16.0);

Когда НЕ использовать const:

  • Для объектов, которые зависят от данных времени выполнения (runtime).
  • Если конструктор класса не помечен как const.

Отличие от final:

  • final гарантирует, что переменная будет инициализирована один раз (в runtime), но не делает её константой времени компиляции. const — это final, но вычисляемое на этапе компиляции.