DEV Community

Cover image for Flutter WidgetsBindingObserver
Gülsen Keskin
Gülsen Keskin

Posted on • Updated on

Flutter WidgetsBindingObserver

WidgetsBindingObserver, Flutter uygulamasının durumuyla ilgili bildirimlere kaydolmak için kullanılabilecek soyut(abstract) bir sınıftır. Örneğin, uygulamanın yaşam döngüsü durumu değiştiğinde, sistem yerel ayarı değiştiğinde veya ekran yönü değiştiğinde bildirim almak için bir WidgetsBindingObserver kullanabilirsiniz.

WidgetsBindingObserver, aşağıdaki değişiklikleri dinlemek için çok kullanışlıdır:

  • yönlendirme olayları
  • cihaz yönü
  • platform ayarları (text scale factor, parlaklık, yerel ayar vb.)
  • uygulama yaşam döngüsü olayları
import 'package:flutter/material.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('WidgetBindingsObserver Sample')),
        body: const WidgetBindingsObserverSample(),
      ),
    );
  }
}

class WidgetBindingsObserverSample extends StatefulWidget {
  const WidgetBindingsObserverSample({super.key});

  @override
  State<WidgetBindingsObserverSample> createState() =>
      _WidgetBindingsObserverSampleState();
}

class _WidgetBindingsObserverSampleState
    extends State<WidgetBindingsObserverSample> with WidgetsBindingObserver {
  final List<AppLifecycleState> _stateHistoryList = <AppLifecycleState>[];

  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
    if (WidgetsBinding.instance.lifecycleState != null) {
      _stateHistoryList.add(WidgetsBinding.instance.lifecycleState!);
    }
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    setState(() {
      _stateHistoryList.add(state);
    });
  }

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

  @override
  Widget build(BuildContext context) {
    if (_stateHistoryList.isNotEmpty) {
      return ListView.builder(
        key: const ValueKey<String>('stateHistoryList'),
        itemCount: _stateHistoryList.length,
        itemBuilder: (BuildContext context, int index) {
          return Text('state is: ${_stateHistoryList[index]}');
        },
      );
    }

    return const Center(
        child: Text('There are no AppLifecycleStates to show.'));
  }
}

Enter fullscreen mode Exit fullscreen mode

Kaynaklar 💙
Andrea Bizzotto
api.flutter.dev

Top comments (0)