Метод deactivate
Метод deactivate класса State идёт перед dispose, когда элемент временно убирают из дерева. Если виджет вернут на место, вызовут activate без нового createState.
Синтаксис
@override
void deactivate()
Пример
Давайте спрячем виджет и увидим deactivate в логе:
import 'package:flutter/material.dart';
void main()
{
runApp(const MaterialApp(home: HideDemo()));
}
class HideDemo extends StatefulWidget
{
const HideDemo({super.key});
@override
State<HideDemo> createState() => _HideDemoState();
}
class _HideDemoState extends State<HideDemo>
{
var visible = true;
@override
Widget build(BuildContext context)
{
return Scaffold(
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
if (visible) const TrackedBox(),
ElevatedButton(
onPressed: () => setState(() => visible = !visible),
child: const Text('abcde'),
),
],
),
),
);
}
}
class TrackedBox extends StatefulWidget
{
const TrackedBox({super.key});
@override
State<TrackedBox> createState() => _TrackedBoxState();
}
class _TrackedBoxState extends State<TrackedBox>
{
@override
void deactivate()
{
print('deactivate');
super.deactivate();
}
@override
Widget build(BuildContext context)
{
return const Text('12345');
}
}
На экране кнопка 'abcde' спрячет текст '12345' и вызовет deactivate.
Пример
Давайте выведем сообщение при deactivate:
import 'package:flutter/material.dart';
void main()
{
runApp(
MaterialApp(
home: Scaffold(
body: Center(
child: OnceLeaf(),
),
),
),
);
}
class OnceLeaf extends StatefulWidget
{
const OnceLeaf({super.key});
@override
State<OnceLeaf> createState() => _OnceLeafState();
}
class _OnceLeafState extends State<OnceLeaf>
{
@override
void deactivate()
{
print('leaf off');
super.deactivate();
}
@override
Widget build(BuildContext context)
{
return const Text('abcde');
}
}
Результат выполнения кода
leaf off