TGViewer
Flutter Friendly Flutter Friendly @flutterfriendly · 995 subscribers
Post #188 743
Всем привет! С вами Анна, Friflex Flutter Team Lead💬

Сегодня поговорим об одном мощном инструменте, который обязательно вам пригодится — WidgetsBindingObserver.

WidgetsBindingObserver — это миксин, который дает возможность объекту, к которому подключается, отслеживать изменения системы и жизненного цикла приложения.

Подключить его очень просто. Для примера создадим Stateful-виджет Example. К состоянию этого виджета нужно подключить миксин, затем в initState() необходимо обратиться к экземпляру WidgetsBinding и подключить текущий виджет как наблюдателя. При этом важно в методе dispose() отсоединять наблюдателя. Подобная реализация state-виджета Example будет выглядеть следующим образом:

class _ExampleState extends State<Example> with WidgetsBindingObserver {
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
}

@override
Widget build(BuildContext context) {
return const Placeholder();
}

@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
}


Что же дает нам такая реализация? WidgetsBindingObserver позволяет отслеживать:

✔️Жизненный цикл приложения (активно, работает в фоне и другие параметры)

 @override
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
print('Жизненный цикл приложения изменился: $state');
}


✔️ Изменения размеров приложения (например, при перевороте экрана)

 @override
void didChangeMetrics() {
super.didChangeMetrics();
final size = View.of(context).physicalSize;
print('Размер экрана изменился: ${size.width}x${size.height}');
}


✔️ Изменения темы системы

 @override
void didChangePlatformBrightness() {
super.didChangePlatformBrightness();
print('Изменилась тема системы');
}


✔️Изменения системной локализации

  @override
void didChangeLocales(List<Locale>? locales) {
super.didChangeLocales(locales);
print(
'Изменилась локализация: ${locales?.map((locale) => locale.toString()).join(', ')}');
}


✔️ Возникновения нехватки памяти в системе

@override
void didHaveMemoryPressure() {
super.didHaveMemoryPressure();
print('Обнаружена нехватка памяти!');
}


✔️Изменения системного размера шрифта

  @override
void didChangeTextScaleFactor() {
super.didChangeTextScaleFactor();
print('Изменился размер шрифта системы');
}


📎Еще больше возможностей WidgetsBindingObserver можно найти в документации

❤️ — если было полезно
  • ❤ 21
  • 🔥 6
  • ❤‍🔥 3
More from @flutterfriendly
  1. May 14, 2026👀Какой сложный вопрос или тема по Flutter вас сейчас беспокоят? Может, задача не идет, ба…
  2. Apr 17, 2026💭Привет! Это Роза, Flutter-разработчица Friflex! Уверена, многие из вас знакомы с Dart De…
  3. Apr 8, 2026Привет, друзья! Делимся нашей страничкой на Хабре, чтобы всегда оставаться на связи. Там е…
  4. Apr 3, 2026🌸Апрель в календаре и на экране Весна зовет обновлять визуальное: убирать темные темы и в…
  5. Apr 1, 2026Всегда с нетерпением ждем этого дня, чтобы сделать подборку ИТ-мемов Пусть поводов для улы…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →