Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
774 of 1024 menu
◀ ▶

Метод activate

Метод activate класса State срабатывает после deactivate, если тот же State вернули в дерево. Память State сохраняется, createState не вызывают снова. Здесь можно возобновить подписки, снятые в deactivate.

Синтаксис

@override void activate()

Пример

Давайте вернём виджет на экран и вызовем activate:

import 'package:flutter/material.dart'; void main() { runApp(const MaterialApp(home: ReturnDemo())); } class ReturnDemo extends StatefulWidget { const ReturnDemo({super.key}); @override State<ReturnDemo> createState() => _ReturnDemoState(); } class _ReturnDemoState extends State<ReturnDemo> { var visible = true; @override Widget build(BuildContext context) { return Scaffold( body: Center( child: Column( mainAxisSize: MainAxisSize.min, children: [ if (visible) const ReturnLeaf(), ElevatedButton( onPressed: () => setState(() => visible = !visible), child: const Text('abcde'), ), ], ), ), ); } } class ReturnLeaf extends StatefulWidget { const ReturnLeaf({super.key}); @override State<ReturnLeaf> createState() => _ReturnLeafState(); } class _ReturnLeafState extends State<ReturnLeaf> { var hits = 0; @override void activate() { super.activate(); hits++; } @override Widget build(BuildContext context) { return Text('12345 $hits'); } }

На экране каждый возврат листа после скрытия увеличит счётчик в activate.

Пример

Давайте выведем activate в консоль:

import 'package:flutter/material.dart'; void main() { runApp(const MaterialApp(home: TabHost())); } class TabHost extends StatefulWidget { const TabHost({super.key}); @override State<TabHost> createState() => _TabHostState(); } class _TabHostState extends State<TabHost> { var page = 0; @override Widget build(BuildContext context) { return Scaffold( body: Center( child: page == 0 ? const ActiveLeaf() : const Text('other'), ), floatingActionButton: FloatingActionButton( onPressed: () => setState(() => page = 1 - page), child: const Text('go'), ), ); } } class ActiveLeaf extends StatefulWidget { const ActiveLeaf({super.key}); @override State<ActiveLeaf> createState() => _ActiveLeafState(); } class _ActiveLeafState extends State<ActiveLeaf> { @override void activate() { print('activate'); super.activate(); } @override Widget build(BuildContext context) { return const Text('abcde'); } }

На экране переключение страницы вернёт 'abcde' и вызовет activate.

Смотрите также

  • метод deactivate,
    который предшествует activate
  • метод dispose,
    который вызывают, если State не вернули
  • смесь AutomaticKeepAliveClientMixin,
    которая уменьшает deactivate у списков
  • класс State,
    к которому относится activate
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить