Middle
Kas yra InheritedWidget ir kaip jį naudoti Flutter?
sobes.tech AI
Atsakymas iš AI
InheritedWidget — tai specialus Flutter widget tipo, kuris leidžia efektyviai skleisti informaciją žemyn per widget medį. Jis naudojamas duomenims ir paslaugoms teikti widgetų podalnyje be būtinybės juos aiškiai perduoti per kiekvieno tarpinio widget konstruktorius.
Pagrindinės InheritedWidget savybės:
- Efektyvus duomenų platinimas: Kai InheritedWidget keičiasi, Flutter automatiškai perstatys tik tuos widgetus, kurie nuo jo priklauso.
- Paprastas prieigos prie duomenų būdas: Vaiko widgetai gali gauti prieigą prie InheritedWidget duomenų naudodami statinį metodą
of(). - Priklausomybių valdymas: Metodas
updateShouldNotifyleidžia kontroliuoti, kada priklausomi widgetai turi būti perstatyti.
Kaip naudoti InheritedWidget:
-
Sukurkite klasę, kuri paveldi iš
InheritedWidget:class MyInheritedWidget extends InheritedWidget { const MyInheritedWidget({ Key? key, required this.data, required Widget child, }) : super(key: key, child: child); final String data; // Duomenys, kurie bus platinami // Metodas, skirtas gauti InheritedWidget egzempliorių static MyInheritedWidget of(BuildContext context) { final MyInheritedWidget? result = context.dependOnInheritedWidgetOfExactType<MyInheritedWidget>(); assert(result != null, 'No MyInheritedWidget found in context'); return result!; } // Nustato, ar turi būti pranešta priklausomiems widgetams apie pakeitimus @override bool updateShouldNotify(MyInheritedWidget oldWidget) { return data != oldWidget.data; // Pranešame, jei duomenys pasikeitė } } -
Padėkite
InheritedWidgetmedyje:class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MyInheritedWidget( // Apvynioja widgetų medį data: 'Labas iš InheritedWidget', child: MaterialApp( title: 'InheritedWidget Demo', home: Scaffold( appBar: AppBar( title: const Text('InheritedWidget Demo'), ), body: const Center( child: MyDependentWidget(), // Widget, kuris naudos duomenis ), ), ), ); } } -
Gauti prieigą prie duomenų iš vaiko widgeto:
class MyDependentWidget extends StatelessWidget { const MyDependentWidget({super.key}); @override Widget build(BuildContext context) { // Gauname prieigą prie duomenų naudodami of() metodą final String receivedData = MyInheritedWidget.of(context).data; return Text( receivedData, style: Theme.of(context).textTheme.headlineMedium, ); } }
InheritedWidget yra pagrindas daugeliui būdų valdyti būseną Flutter, tokių kaip Provider, Bloc. Jis užtikrina efektyvų ir deklaratyvų duomenų mainų būdą widgetų medyje.