Жизненный цикл состояния:

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

Жизненный цикл приложения:

Ваше состояние должно расширять WidgetsBindingObserver, и вот как его использовать:

Шаг 1: Добавьте наблюдателя в жизненный цикл, добавив это:

Шаг 2: Удалить наблюдателя:

Шаг 3: обратные вызовы состояния прослушивания:

  • неактивно — приложение находится в неактивном состоянии и не принимает данные от пользователя.
  • приостановлено — приложение в настоящее время не видно пользователю, не отвечает на ввод пользователя и работает в фоновом режиме.
  • возобновлено — приложение отображается и отвечает на действия пользователя.
  • detached — когда приложение находится в этом состоянии, ядро ​​работает без представления. Это может быть либо в процессе прикрепления представления, когда движок был впервые инициализирован, либо после того, как представление было уничтожено из-за всплывающего окна навигатора.