Middle
Šta je InheritedWidget i kako ga koristiti u Flutteru?
sobes.tech АИ
Одговор од АИ
InheritedWidget je poseban tip widget-a u Flutter-u koji omogućava efikasno širenje informacija naniže kroz drvo widget-a. Koristi se za pružanje podataka i usluga podstablu widget-a bez potrebe da ih eksplicitno prosleđujete kroz konstruktore svakog međuvrstnog widget-a.
Ključne osobine InheritedWidget:
- Efikasno širenje podataka: Kada se promeni InheritedWidget, Flutter automatski rekonstruira samo one widget-e u podstablu koji zavise od njega.
- Jednostavan pristup podacima: Dječiji widget-i mogu pristupiti podacima InheritedWidget-a pomoću statičke metode
of(). - Upravljanje zavisnostima: Metoda
updateShouldNotifyomogućava kontrolu kada bi zavisni widget-i trebalo da budu rekonstruisani.
Kako koristiti InheritedWidget:
-
Kreirajte klasu koja nasleđuje od
InheritedWidget:class MyInheritedWidget extends InheritedWidget { const MyInheritedWidget({ Key? key, required this.data, required Widget child, }) : super(key: key, child: child); final String data; // Podaci koji će biti distribuirani // Metod za dobijanje instance InheritedWidget static MyInheritedWidget of(BuildContext context) { final MyInheritedWidget? result = context.dependOnInheritedWidgetOfExactType<MyInheritedWidget>(); assert(result != null, 'No MyInheritedWidget found in context'); return result!; } // Određuje da li treba obavestiti zavisne widget-e o promenama @override bool updateShouldNotify(MyInheritedWidget oldWidget) { return data != oldWidget.data; // Obaveštavamo ako su podaci promenjeni } } -
Postavite
InheritedWidgetu drvo widget-a:class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MyInheritedWidget( // Omotava podstablo widget-a data: 'Zdravo iz InheritedWidget', child: MaterialApp( title: 'InheritedWidget Demo', home: Scaffold( appBar: AppBar( title: const Text('InheritedWidget Demo'), ), body: const Center( child: MyDependentWidget(), // Widget koji će koristiti podatke ), ), ), ); } } -
Pristupite podacima iz detetovog widget-a:
class MyDependentWidget extends StatelessWidget { const MyDependentWidget({super.key}); @override Widget build(BuildContext context) { // Dobijamo pristup podacima pomoću metode of() final String receivedData = MyInheritedWidget.of(context).data; return Text( receivedData, style: Theme.of(context).textTheme.headlineMedium, ); } }
InheritedWidget je osnova za mnoga rešenja za upravljanje stanjem u Flutter-u, kao što su Provider, Bloc. On obezbeđuje efikasan i deklarativan način razmene podataka u drvetu widget-a.