Middle
Co je InheritedWidget a jak jej používat ve Flutteru?
sobes.tech AI
Odpověď od AI
InheritedWidget je speciální typ widgetu ve Flutteru, který umožňuje efektivně šířit informace dolů po stromu widgetů. Používá se k poskytování dat a služeb podstromu widgetů bez nutnosti je explicitně předávat přes konstruktory každého mezilehlého widgetu.
Klíčové vlastnosti InheritedWidget:
- Efektivní šíření dat: Při změně InheritedWidget Flutter automaticky přestavuje pouze ty widgety v podstromu, které na něj závisí.
- Jednoduchý přístup k datům: Dětské widgety mohou získat přístup k datům InheritedWidget pomocí statické metody
of(). - Správa závislostí: Metoda
updateShouldNotifyumožňuje kontrolovat, kdy by měly být přestavěny závislé widgety.
Jak používat InheritedWidget:
-
Vytvořte třídu, která dědí od
InheritedWidget:class MyInheritedWidget extends InheritedWidget { const MyInheritedWidget({ Key? key, required this.data, required Widget child, }) : super(key: key, child: child); final String data; // Data, která budou rozšířena // Metoda pro získání instance InheritedWidget static MyInheritedWidget of(BuildContext context) { final MyInheritedWidget? result = context.dependOnInheritedWidgetOfExactType<MyInheritedWidget>(); assert(result != null, 'No MyInheritedWidget found in context'); return result!; } // Určuje, zda by měly být upozorněny závislé widgety na změny @override bool updateShouldNotify(MyInheritedWidget oldWidget) { return data != oldWidget.data; // Upozornit, pokud se data změnila } } -
Umístěte
InheritedWidgetdo stromu widgetů:class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MyInheritedWidget( // Obaluje podstrom widgetů data: 'Ahoj z InheritedWidget', child: MaterialApp( title: 'InheritedWidget Demo', home: Scaffold( appBar: AppBar( title: const Text('InheritedWidget Demo'), ), body: const Center( child: MyDependentWidget(), // Widget, který bude používat data ), ), ), ); } } -
Získat přístup k datům z dětského widgetu:
class MyDependentWidget extends StatelessWidget { const MyDependentWidget({super.key}); @override Widget build(BuildContext context) { // Získáváme přístup k datům pomocí metody of() final String receivedData = MyInheritedWidget.of(context).data; return Text( receivedData, style: Theme.of(context).textTheme.headlineMedium, ); } }
InheritedWidget je základem pro mnoho řešení správy stavu ve Flutteru, jako jsou Provider, Bloc. Zajišťuje efektivní a deklarativní způsob výměny dat v stromu widgetů.