Sobes.tech
Junior — Middle

Czy możesz wyjaśnić zasadę działania InheritedWidget w Flutter?

sobes.tech AI

Odpowiedź od AI

InheritedWidget w Flutterze jest używany do przekazywania danych w dół drzewa widżetów bez konieczności jawnego przekazywania ich przez konstruktory każdego widżetu potomnego. Pozwala to widżetom potomnym na dostęp do wspólnych danych i automatyczne ich odświeżanie przy zmianie.

Zasada działania:

  • InheritedWidget przechowuje dane, które mają być dostępne dla potomków.
  • Potomkowie uzyskują dostęp do tych danych za pomocą metody of(context).
  • Jeśli dane w InheritedWidget ulegną zmianie, Flutter powiadamia wszystkie widżety zależne od niego i są one przebudowywane.

Przykład:

class MyData extends InheritedWidget {
  final int counter;

  MyData({required this.counter, required Widget child}) : super(child: child);

  static MyData? of(BuildContext context) {
    return context.dependOnInheritedWidgetOfExactType<MyData>();
  }

  @override
  bool updateShouldNotify(MyData oldWidget) {
    return oldWidget.counter != counter;
  }
}

// Użycie:
// W widgetcie rodzicu opakować drzewo w MyData
// W widgetach potomnych uzyskać dane przez MyData.of(context)?.counter

W ten sposób InheritedWidget pomaga efektywnie dzielić stan i dane między widżetami bez nadmiernego przekazywania parametrów.