> Как устроен жизненный цикл виджетов во Flutter (Flutter)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: Верме

Стек: Flutter

> Пример ответа

Жизненный цикл виджета во Flutter напрямую зависит от его типа: StatelessWidget (статические) и StatefulWidget (с состоянием).

StatelessWidget живёт от создания до уничтожения. У него только один этап - вызов метода build(), который возвращает дерево дочерних виджетов. Он не может изменяться после сборки.

StatefulWidget имеет более сложный цикл, управляемый объектом State. Основные этапы:

  1. createState() - вызывается один раз при встраивании виджета в дерево. Создаёт экземпляр State.
  2. initState() - вызывается сразу после создания State. Здесь инициализируют подписки, контроллеры, анимации. Нельзя использовать BuildContext для вызова showDialog или Navigator.
  3. didChangeDependencies() - вызывается после initState() и при изменении зависимостей (например, InheritedWidget). Часто используется для загрузки данных.
  4. build() - основной метод, возвращающий виджет. Вызывается многократно при изменениях состояния или родительского виджета.
  5. didUpdateWidget() - вызывается, когда родитель перестраивает виджет с новыми параметрами. Позволяет реагировать на изменения конфигурации.
  6. setState() - не этап, а метод, который помечает виджет как грязный и запускает пересборку через build().
  7. deactivate() - вызывается при удалении виджета из дерева (например, при переходе на другой экран). Можно отменить подписки.
  8. dispose() - финальный этап. Освобождает ресурсы: таймеры, контроллеры, слушатели. После вызова State становится мёртвым.

Важно: build() может вызываться многократно, поэтому он должен быть чистым (без побочных эффектов). Инициализацию и очистку выносят в initState() и dispose() соответственно.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью