Метод dispose
Метод dispose класса State вызывают один раз, когда элемент больше не вернут. Здесь закрывают контроллеры и отменяют подписки. В конце вызывают super.dispose(). После dispose вызывать setState нельзя.
Синтаксис
@override
void dispose()
Пример
Давайте освободим TextEditingController в dispose:
import 'package:flutter/material.dart';
void main()
{
runApp(
MaterialApp(
home: Scaffold(
body: Center(
child: FieldLeaf(),
),
),
),
);
}
class FieldLeaf extends StatefulWidget
{
const FieldLeaf({super.key});
@override
State<FieldLeaf> createState() => _FieldLeafState();
}
class _FieldLeafState extends State<FieldLeaf>
{
final controller = TextEditingController(text: 'abcde');
@override
void dispose()
{
controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context)
{
return TextField(controller: controller);
}
}
На экране поле покажет 'abcde', а dispose снимет контроллер.
Пример
Давайте выведем в консоль факт dispose:
import 'package:flutter/material.dart';
void main()
{
runApp(const MaterialApp(home: SwapLeafHost()));
}
class SwapLeafHost extends StatefulWidget
{
const SwapLeafHost({super.key});
@override
State<SwapLeafHost> createState() => _SwapLeafHostState();
}
class _SwapLeafHostState extends State<SwapLeafHost>
{
var show = true;
@override
Widget build(BuildContext context)
{
return Scaffold(
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
if (show) const LogLeaf(),
ElevatedButton(
onPressed: () => setState(() => show = !show),
child: const Text('12345'),
),
],
),
),
);
}
}
class LogLeaf extends StatefulWidget
{
const LogLeaf({super.key});
@override
State<LogLeaf> createState() => _LogLeafState();
}
class _LogLeafState extends State<LogLeaf>
{
@override
void dispose()
{
print('dispose');
super.dispose();
}
@override
Widget build(BuildContext context)
{
return const Text('abcde');
}
}
На экране кнопка '12345' уберёт лист и вызовет dispose.
Смотрите также
-
метод
initState,
который создаёт ресурсы доdispose -
метод
deactivate,
который идёт передdisposeпри снятии с дерева -
метод
dispose,
который освобождаетChangeNotifier -
класс
State,
к которому относитсяdispose