Sobes.tech
Middle

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 updateShouldNotify stelt je in staat te controleren wanneer afhankelijke widgets opnieuw opgebouwd moeten worden.

Hoe InheritedWidget te gebruiken:

  1. 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
      }
    }
    
  2. Plaats InheritedWidget in 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
              ),
            ),
          ),
        );
      }
    }
    
  3. 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.