Жизненный цикл виджета в Flutter

В Flutter жизненный цикл виджета можно разделить на несколько фаз, и он тесно связан с состоянием виджета. Существуют два основных типа виджетов: Stateless (без состояния) и Stateful (с состоянием). Жизненный цикл StatelessWidget прост, так как он не изменяется после создания. Однако StatefulWidget имеет более сложный жизненный цикл, поскольку может изменяться со временем и содержит изменяемое состояние. Давайте сосредоточимся на жизненном цикле StatefulWidget.
Обзор жизненного цикла StatefulWidget
В StatefulWidget
сам виджет неизменяемый, но у него есть ассоциированный объект State
, который содержит изменяемое состояние. Жизненный цикл объекта State
и управляет изменениями виджета.
Основные методы жизненного цикла State
:
-
createState()
:- Этот метод вызывается при первом создании
StatefulWidget
. Он возвращает объектState
, который будет использоваться для управления жизненным циклом виджета. - Вызывается только один раз в течение жизненного цикла виджета.
- Этот метод вызывается при первом создании
-
initState()
:- Вызывается при первом создании состояния. Здесь можно инициализировать переменные, запустить анимации или сделать запросы к API.
- Вызывается один раз, когда объект состояния вставляется в дерево виджетов.
-
didChangeDependencies()
:- Вызывается, когда виджет вставляется в дерево, а также когда зависимости состояния изменяются. Например, этот метод вызывается, когда изменяется унаследованный виджет, от которого зависит этот виджет.
- Обычно используется для реакции на изменения зависимостей (например,
InheritedWidget
).
-
build()
:- Это самый важный метод. Здесь создаётся UI виджета. Он вызывается каждый раз, когда виджет перерисовывается, что происходит при изменении состояния (например, когда вы вызываете
setState()
). - Может вызываться несколько раз в течение жизненного цикла виджета, когда необходимо его повторно отрисовать.
- Это самый важный метод. Здесь создаётся UI виджета. Он вызывается каждый раз, когда виджет перерисовывается, что происходит при изменении состояния (например, когда вы вызываете
-
didUpdateWidget()
:- Вызывается, когда родительский виджет перерисовывается и требует обновления этого виджета (например, из-за изменения конфигурации виджета).
- Здесь можно сравнить старые и новые значения свойств и выполнить соответствующие действия.
-
setState()
:- Этот метод не является частью методов жизненного цикла как такового, но является основным триггером для перерисовки виджета.
- Вызов
setState()
помечает дерево виджетов как "грязное", заставляя Flutter перерисовать виджет, чтобы отразить обновлённое состояние.
-
deactivate()
:- Вызывается, когда виджет удаляется из дерева виджетов, но может быть повторно вставлен перед окончательным удалением. Это происходит, когда виджет временно удаляется во время перестройки дерева.
-
dispose()
:- Вызывается, когда объект
State
окончательно удаляется из дерева виджетов и больше не будет использоваться. Здесь нужно освободить ресурсы (например, стримы, слушатели, анимации и т.д.).
- Вызывается, когда объект
-
reassemble()
:- Используется в сценариях отладки при горячей перезагрузке (hot reload). Позволяет разработчикам повторно собрать состояние во время горячей перезагрузки.
Типичный поток жизненного цикла
- createState()
- initState()
- didChangeDependencies()
- build()
- didUpdateWidget() (если родительский виджет изменился и передал новые данные)
- deactivate() (если временно удалён)
- dispose()
Резюме
По сути, жизненный цикл StatefulWidget
в Flutter вращается вокруг создания и уничтожения ассоциированного объекта состояния, а также управления изменениями состояния, которые инициируют обновления пользовательского интерфейса. Понимание этих методов жизненного цикла необходимо для правильного управления ресурсами, выполнения асинхронных операций и контроля поведения виджета в ответ на изменения в окружении.