Ответ
Неизменяемые объекты — это объекты, состояние которых нельзя изменить после создания. В Dart это достигается комбинацией final полей и const конструкторов. Они критически важны для Flutter-виджетов.
Базовый пример неизменяемого класса:
class ImmutablePoint {
final int x;
final int y;
const ImmutablePoint(this.x, this.y);
}
Почему это важно во Flutter?
- Производительность: Flutter часто перестраивает виджеты.
constконструктор позволяет Flutter переиспользовать один экземпляр виджета в памяти, вместо создания нового. - Предсказуемость: Гарантия, что данные виджета не изменятся во время его жизни, упрощает отладку и предотвращает трудноуловимые баги.
Практическое применение в виджетах:
class MyTitle extends StatelessWidget {
final String text; // final поле
const MyTitle({Key? key, required this.text}) : super(key: key); // const конструктор
@override
Widget build(BuildContext context) {
return Text(text);
}
}
// Использование с const - виджет будет создан один раз и закэширован.
const MyTitle(text: 'Hello');
Ключевые преимущества:
- Thread-safe: Безопасны в асинхронных операциях, так как состояние не меняется.
- Кэширование: Объекты, созданные через
const, кэшируются во время компиляции и выполнения (identical()возвращаетtrueдля одинаковых значений). - Оптимизация: Позволяют Flutter пропускать перерисовку поддеревьев, если все дочерние виджеты также
const.