Жизненный цикл состояния:
createState()
: когда Framework получает указание создать StatefulWidget, он немедленно вызываетcreateState()
mounted
верно: когдаcreateState
создает класс состояния, этому состоянию присваиваетсяbuildContext
.buildContext
— это чрезмерно упрощенное место в дереве виджетов, в котором размещается этот виджет. Вот более длинное объяснение. Все виджеты имеют свойствоbool this.mounted
. Это становится истинным, когда назначаетсяbuildContext
. ВызовsetState
при размонтировании виджета является ошибкой.initState()
: это первый метод, вызываемый при создании виджета (конечно, после конструктора класса).initState
вызывается один и только один раз. Он должен вызватьsuper.initState()
.didChangeDependencies()
: этот метод вызывается сразу послеinitState
при первой сборке виджета.build()
: этот метод вызывается часто. Это требуется, и он должен возвращать виджет.didUpdateWidget(Widget oldWidget)
: если родительский виджет изменяется и необходимо перестроить этот виджет (потому что ему нужно дать другие данные), но он перестраивается с тем жеruntimeType
, то вызывается этот метод. Это потому, что Flutter повторно использует долгоживущее состояние. В этом случае вы можете снова инициализировать некоторые данные, как вinitState
.setState()
: этот метод часто вызывается самой структурой и разработчиком. Используется для уведомления фреймворка об изменении данных.deactivate()
: Деактивация вызывается, когда состояние удаляется из дерева, но оно может быть повторно вставлено до завершения текущего изменения кадра. Этот метод существует в основном потому, что объекты State можно перемещать из одной точки дерева в другую.dispose()
:dispose()
вызывается при удалении объекта State, что является постоянным. В этом методе вы должны отказаться от подписки и отменить все анимации, потоки и т. д.mounted
имеет значение false: объект состояния никогда не может быть перемонтирован, и при вызовеsetState
будет выдана ошибка.
Жизненный цикл приложения:
Ваше состояние должно расширять WidgetsBindingObserver, и вот как его использовать:
Шаг 1: Добавьте наблюдателя в жизненный цикл, добавив это:
Шаг 2: Удалить наблюдателя:
Шаг 3: обратные вызовы состояния прослушивания:
- неактивно — приложение находится в неактивном состоянии и не принимает данные от пользователя.
- приостановлено — приложение в настоящее время не видно пользователю, не отвечает на ввод пользователя и работает в фоновом режиме.
- возобновлено — приложение отображается и отвечает на действия пользователя.
- detached — когда приложение находится в этом состоянии, ядро работает без представления. Это может быть либо в процессе прикрепления представления, когда движок был впервые инициализирован, либо после того, как представление было уничтожено из-за всплывающего окна навигатора.