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.'));
}
}
Kaynaklar 💙
Andrea Bizzotto
api.flutter.dev
Top comments (0)