Метод removeObserver
Метод removeObserver миксина WidgetsBinding отписывает объект от.
Вызывают в dispose, чтобы не держать ссылку на State.
Синтаксис
WidgetsBinding.instance.removeObserver(observer)
Параметры
| Параметр | Описание |
|---|---|
observer | Тот же экземпляр, что передавали в addObserver. |
Пример
Давайте снимем наблюдателя в dispose:
import 'package:flutter/material.dart';
void main() => runApp(MaterialApp(home: Scaffold(body: Center(child: ObserverDemo()))));
class ObserverDemo extends StatefulWidget
{
const ObserverDemo({super.key});
@override
State<ObserverDemo> createState() => _ObserverDemoState();
}
class _ObserverDemoState extends State<ObserverDemo> with WidgetsBindingObserver
{
@override
void initState()
{
super.initState();
WidgetsBinding.instance.addObserver(this);
}
@override
void dispose()
{
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
Widget build(BuildContext context) => const Text('abcde');
}
На экране текст 'abcde', после dispose колбэки жизни не придут.
Пример
Давайте снимем внешний логгер:
import 'package:flutter/material.dart';
void main()
{
WidgetsFlutterBinding.ensureInitialized();
final logger = MetricsLogger();
WidgetsBinding.instance.addObserver(logger);
WidgetsBinding.instance.removeObserver(logger);
runApp(MaterialApp(home: Scaffold(body: Center(child: Text('12345')))));
}
class MetricsLogger with WidgetsBindingObserver { }
На экране текст '12345', logger больше не слушает метрики.
Смотрите также
-
метод
addObserver,
который добавляет пару кremoveObserver -
миксин
WidgetsBindingObserver,
который нужно снимать в dispose -
миксин
WidgetsBinding,
хранит список наблюдателей -
метод
didChangeMetrics,
который перестанет вызываться послеremoveObserver