Wat is InheritedWidget en hoe gebruik je het in Flutter?
sobes.tech AI
Antwoord van AI
InheritedWidget is een speciaal type widget in Flutter dat het mogelijk maakt om informatie efficiënt naar beneden in de widgetboom te verspreiden. Het wordt gebruikt om gegevens en services aan onderbomen van widgets te bieden zonder ze expliciet door de constructeurs van elke tussenliggende widget te hoeven doorgeven.
Belangrijke kenmerken van InheritedWidget:
- Efficiënte gegevensverspreiding: Wanneer InheritedWidget verandert, bouwt Flutter automatisch alleen de widgets in de subboom die ervan afhankelijk zijn opnieuw op.
- Eenvoudige toegang tot gegevens: Kind-widgets kunnen toegang krijgen tot de gegevens van InheritedWidget via de statische methode
of(). - Beheer van afhankelijkheden: De methode
updateShouldNotifystelt je in staat te controleren wanneer afhankelijke widgets opnieuw opgebouwd moeten worden.
Hoe InheritedWidget te gebruiken:
-
Maak een klasse die erft van
InheritedWidget:class MyInheritedWidget extends InheritedWidget { const MyInheritedWidget({ Key? key, required this.data, required Widget child, }) : super(key: key, child: child); final String data; // Gegevens die worden verspreid // Methode om de instantie van InheritedWidget te verkrijgen static MyInheritedWidget of(BuildContext context) { final MyInheritedWidget? result = context.dependOnInheritedWidgetOfExactType<MyInheritedWidget>(); assert(result != null, 'Geen MyInheritedWidget gevonden in context'); return result!; } // Bepaalt of afhankelijke widgets geïnformeerd moeten worden over wijzigingen @override bool updateShouldNotify(MyInheritedWidget oldWidget) { return data != oldWidget.data; // Informeer bij dataverandering } } -
Plaats
InheritedWidgetin de widgetboom:class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MyInheritedWidget( // Omwikkel de widgetboom data: 'Hallo van InheritedWidget', child: MaterialApp( title: 'Demo InheritedWidget', home: Scaffold( appBar: AppBar( title: const Text('Demo InheritedWidget'), ), body: const Center( child: MyDependentWidget(), // Widget dat gegevens gebruikt ), ), ), ); } } -
Toegang tot gegevens vanuit een kind-widget:
class MyDependentWidget extends StatelessWidget { const MyDependentWidget({super.key}); @override Widget build(BuildContext context) { // Toegang tot gegevens via de of() methode final String receivedData = MyInheritedWidget.of(context).data; return Text( receivedData, style: Theme.of(context).textTheme.headlineMedium, ); } }
InheritedWidget vormt de basis voor veel oplossingen voor toestandbeheer in Flutter, zoals Provider, Bloc. Het biedt een efficiënte en declaratieve manier om gegevens uit te wisselen in de widgetboom.