Middle
Mis on InheritedWidget ja kuidas seda Flutteris kasutada?
sobes.tech AI
Vastus AI-lt
InheritedWidget on spetsiaalne Flutteri vidin, mis võimaldab tõhusalt levitada teavet allapoole vidinate puus. Seda kasutatakse andmete ja teenuste pakkumiseks vidinate puu alamkonstruktsioonidele ilma neid otseselt iga vahepealse vidina konstruktorite kaudu edastamata.
InheritedWidgeti peamised omadused:
- Tõhus andmete levitamine: Kui InheritedWidget muutub, Flutter uuendab automaatselt ainult neid vidinaid puus, mis sellest sõltuvad.
- Lihtne andmetele juurdepääs: Alamvidinad saavad andmetele ligi, kasutades staatilist meetodit
of(). - Sõltuvuste haldamine: Meetod
updateShouldNotifyvõimaldab kontrollida, millal sõltuvad vidinad peaksid uuesti ehitatama.
Kuidas kasutada InheritedWidgeti:
-
Loo klass, mis pärib
InheritedWidgetist:class MyInheritedWidget extends InheritedWidget { const MyInheritedWidget({ Key? key, required this.data, required Widget child, }) : super(key: key, child: child); final String data; // Andmed, mis levitatakse // Meetod InheritedWidget eksemplari saamiseks static MyInheritedWidget of(BuildContext context) { final MyInheritedWidget? result = context.dependOnInheritedWidgetOfExactType<MyInheritedWidget>(); assert(result != null, 'MyInheritedWidget ei leidu kontekstis'); return result!; } // Määrab, kas teavitada sõltuvaid vidinaid muudatustest @override bool updateShouldNotify(MyInheritedWidget oldWidget) { return data != oldWidget.data; // Teavitame, kui andmed on muutunud } } -
Paigalda
InheritedWidgetvidinate puusse:class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MyInheritedWidget( // Kattub vidinate alamkonstruktsiooniga data: 'Tere InheritedWidgetist', child: MaterialApp( title: 'InheritedWidget Demo', home: Scaffold( appBar: AppBar( title: const Text('InheritedWidget Demo'), ), body: const Center( child: MyDependentWidget(), // Vidin, mis kasutab andmeid ), ), ), ); } } -
Saada andmeid alamvidinast:
class MyDependentWidget extends StatelessWidget { const MyDependentWidget({super.key}); @override Widget build(BuildContext context) { // Saad andmed `of()` meetodi abil final String receivedData = MyInheritedWidget.of(context).data; return Text( receivedData, style: Theme.of(context).textTheme.headlineMedium, ); } }
InheritedWidget on aluseks paljudele Flutteri oleku haldamise lahendustele, nagu Provider, Bloc. See tagab tõhusa ja deklaratiivse viisi andmete vahetamiseks vidinate puus.