Middle
Kas ir InheritedWidget un kā to izmantot Flutter?
sobes.tech AI
Atbilde no AI
InheritedWidget ir īpaša veida Flutter widget, kas ļauj efektīvi izplatīt informāciju uz leju pa widgetu koku. To izmanto datu un pakalpojumu nodrošināšanai widgetu apakškokā bez nepieciešamības tos skaidri nodot caur katra starpposma widgeta konstruktoru.
Galvenās iezīmes InheritedWidget:
- Efektīva datu izplatīšana: Kad InheritedWidget mainās, Flutter automātiski pārveido tikai tās widgetus apakškokā, kas ir no tā atkarīgi.
- Vienkārša piekļuve datiem: Apakšwidgeti var piekļūt InheritedWidget datiem, izmantojot statisko metodi
of(). - Atkarību pārvaldība: Metode
updateShouldNotifyļauj kontrolēt, kad atkarīgie widgeti jāpārveido.
Kā izmantot InheritedWidget:
-
Izveidot klasi, kas manto no
InheritedWidget:class MyInheritedWidget extends InheritedWidget { const MyInheritedWidget({ Key? key, required this.data, required Widget child, }) : super(key: key, child: child); final String data; // Dati, kas tiks izplatīti // Metode, lai iegūtu InheritedWidget eksemplāru static MyInheritedWidget of(BuildContext context) { final MyInheritedWidget? result = context.dependOnInheritedWidgetOfExactType<MyInheritedWidget>(); assert(result != null, 'MyInheritedWidget nav atrasts kontekstā'); return result!; } // Nosaka, vai jāziņo atkarīgie widgeti par izmaiņām @override bool updateShouldNotify(MyInheritedWidget oldWidget) { return data != oldWidget.data; // Ziņot, ja dati ir mainījušies } } -
Ievietot
InheritedWidgetwidgetu kokā:class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MyInheritedWidget( // Ievieto apakškoku ar datiem data: 'Sveiki no InheritedWidget', child: MaterialApp( title: 'InheritedWidget Demo', home: Scaffold( appBar: AppBar( title: const Text('InheritedWidget Demo'), ), body: const Center( child: MyDependentWidget(), // Widget, kas izmantos datus ), ), ), ); } } -
Pieņemt datus no apakšwidgeta:
class MyDependentWidget extends StatelessWidget { const MyDependentWidget({super.key}); @override Widget build(BuildContext context) { // Piekrīt piekļuvi datiem ar of() metodi final String receivedData = MyInheritedWidget.of(context).data; return Text( receivedData, style: Theme.of(context).textTheme.headlineMedium, ); } }
InheritedWidget ir pamats daudziem stāvokļa pārvaldības risinājumiem Flutter, piemēram, Provider, Bloc. Tas nodrošina efektīvu un deklaratīvu veidu datu apmaiņai widgetu kokā.