Ответ
Виджеты Flutter легковесны, потому что они являются неизменяемыми (immutable) конфигурациями, описывающими часть пользовательского интерфейса, а не тяжелыми объектами, управляющими своим собственным жизненным циклом и состоянием, как в традиционных нативных фреймворках (например, UIView в iOS или View в Android).
Ключевые причины:
- Неизменяемость и перестроение: Виджеты пересоздаются при каждом изменении состояния. Flutter эффективно сравнивает новое дерево виджетов с предыдущим (процесс диффинга) и обновляет только те части рендер-дерева (RenderObject), которые действительно изменились.
- Композиция вместо наследования: Сложные интерфейсы строятся из простых, переиспользуемых виджетов. Например,
Container— это не монолитный виджет, а удобная композиция изPadding,DecoratedBox,Alignи других. - Отделение логики от рендеринга: Виджеты — это лишь "синие принты". За непосредственное отображение на экране отвечает отдельный, долгоживущий слой RenderObjects, который оптимизирован для работы с графическим движком Skia.
Пример:
// Этот Text-виджет — это просто конфигурация.
// При перестроении создается новый легковесный экземпляр,
// но Flutter эффективно связывает его с существующим RenderParagraph.
Text(
'Hello, Flutter!',
style: TextStyle(fontSize: 20, color: Colors.blue),
)
Этот подход позволяет Flutter достигать высокой частоты кадров, даже при частых обновлениях UI.