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

Метод 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
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить