Middle
Was ist InheritedWidget und wie verwendet man es in Flutter?
sobes.tech KI
Antwort von AI
InheritedWidget ist ein spezieller Widget-Typ in Flutter, der es ermöglicht, Informationen effizient nach unten im Widget-Baum zu verbreiten. Er wird verwendet, um Daten und Dienste an Unterbäume von Widgets bereitzustellen, ohne sie explizit durch die Konstruktoren jedes Zwischen-Widgets zu übergeben.
Wichtige Merkmale von InheritedWidget:
- Effiziente Datenverteilung: Wenn sich InheritedWidget ändert, baut Flutter nur die Widgets im Unterbaum neu auf, die davon abhängen.
- Einfacher Zugriff auf Daten: Kind-Widgets können auf die Daten von InheritedWidget über die statische Methode
of()zugreifen. - Verwaltung von Abhängigkeiten: Die Methode
updateShouldNotifyermöglicht es, zu steuern, wann abhängige Widgets neu aufgebaut werden sollen.
So verwendet man InheritedWidget:
-
Erstellen einer Klasse, die von
InheritedWidgeterbt:class MyInheritedWidget extends InheritedWidget { const MyInheritedWidget({ Key? key, required this.data, required Widget child, }) : super(key: key, child: child); final String data; // Daten, die verteilt werden // Methode zum Zugriff auf die Instanz von InheritedWidget static MyInheritedWidget of(BuildContext context) { final MyInheritedWidget? result = context.dependOnInheritedWidgetOfExactType<MyInheritedWidget>(); assert(result != null, 'Kein MyInheritedWidget im Kontext gefunden'); return result!; } // Bestimmt, ob abhängige Widgets bei Änderungen benachrichtigt werden sollen @override bool updateShouldNotify(MyInheritedWidget oldWidget) { return data != oldWidget.data; // Benachrichtigt bei Datenänderung } } -
Einfügen von
InheritedWidgetin den Widget-Baum:class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MyInheritedWidget( // Umhüllt den Widget-Unterbaum data: 'Hallo von InheritedWidget', child: MaterialApp( title: 'InheritedWidget Demo', home: Scaffold( appBar: AppBar( title: const Text('InheritedWidget Demo'), ), body: const Center( child: MyDependentWidget(), // Widget, das die Daten nutzt ), ), ), ); } } -
Zugriff auf Daten im Kind-Widget:
class MyDependentWidget extends StatelessWidget { const MyDependentWidget({super.key}); @override Widget build(BuildContext context) { // Zugriff auf Daten mittels of() final String receivedData = MyInheritedWidget.of(context).data; return Text( receivedData, style: Theme.of(context).textTheme.headlineMedium, ); } }
InheritedWidget ist die Grundlage für viele Zustandsmanagement-Lösungen in Flutter, wie Provider, Bloc. Es bietet eine effiziente und deklarative Möglichkeit, Daten im Widget-Baum auszutauschen.