Middle
Ce este InheritedWidget și cum îl folosești în Flutter?
sobes.tech AI
Răspuns de la AI
InheritedWidget este un tip special de widget în Flutter care permite distribuirea eficientă a informațiilor în jos în arborele de widget-uri. Este utilizat pentru a furniza date și servicii subarborelui de widget-uri fără a fi nevoie să le transmiteți explicit prin constructorii fiecărui widget intermediar.
Caracteristici cheie ale InheritedWidget:
- Distribuție eficientă a datelor: Când InheritedWidget se schimbă, Flutter reconstruiește automat doar widget-urile din subarborele care depind de acesta.
- Acces simplu la date: Widget-urile copil pot accesa datele InheritedWidget folosind metoda statică
of(). - Gestionarea dependențelor: Metoda
updateShouldNotifypermite controlul asupra momentului în care widget-urile dependente trebuie reconstruite.
Cum se folosește InheritedWidget:
-
Creați o clasă care moștenește de la
InheritedWidget:class MyInheritedWidget extends InheritedWidget { const MyInheritedWidget({ Key? key, required this.data, required Widget child, }) : super(key: key, child: child); final String data; // Datele care vor fi distribuite // Metodă pentru obținerea instanței de InheritedWidget static MyInheritedWidget of(BuildContext context) { final MyInheritedWidget? result = context.dependOnInheritedWidgetOfExactType<MyInheritedWidget>(); assert(result != null, 'Niciun MyInheritedWidget găsit în context'); return result!; } // Definește dacă widget-urile dependente trebuie să fie notificate despre schimbări @override bool updateShouldNotify(MyInheritedWidget oldWidget) { return data != oldWidget.data; // Notifică dacă datele s-au schimbat } } -
Plasați
InheritedWidgetîn arborele de widget-uri:class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MyInheritedWidget( // Înveliți arborele de widget-uri data: 'Salut din InheritedWidget', child: MaterialApp( title: 'Demo InheritedWidget', home: Scaffold( appBar: AppBar( title: const Text('Demo InheritedWidget'), ), body: const Center( child: MyDependentWidget(), // Widget care va folosi datele ), ), ), ); } } -
Accesați datele dintr-un widget copil:
class MyDependentWidget extends StatelessWidget { const MyDependentWidget({super.key}); @override Widget build(BuildContext context) { // Accesul la date se face cu metoda of() final String receivedData = MyInheritedWidget.of(context).data; return Text( receivedData, style: Theme.of(context).textTheme.headlineMedium, ); } }
InheritedWidget stă la baza multor soluții de gestionare a stării în Flutter, precum Provider, Bloc. Oferă o modalitate eficientă și declarativă de a schimba datele în arborele de widget-uri.