Метод 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