Sobes.tech
Junior — Middle

Magyarázza el a Flutter kontextusában a StatefulWidget, StatelessWidget és InheritedWidget közötti fő különbségeket.

sobes.tech MI

Válasz az MI-től

StatelessWidget — ez egy állapot nélküli widget. Egyszer épül fel, és nem változtatja meg a megjelenését, kivéve, ha a bemeneti paraméterek változnak. Statikus felhasználói felület megjelenítésére használják.

StatefulWidget — ez egy állapottal rendelkező widget. Megváltoztathatja a megjelenését események vagy adatmódosítások hatására. Ehhez egy külön State objektumot hoznak létre, amely kezeli az állapotot és újrarajzolást kér.

InheritedWidget — egy speciális widget, amely lehetővé teszi adatok továbbítását lefelé a widget fa mentén anélkül, hogy azokat kifejezetten át kellene adni a konstruktorokon keresztül. Globális állapot vagy közös adatok megvalósítására használják, amelyekhez a gyermek widgetek hozzáférhetnek.

Példa az InheritedWidget használatára téma átadásához:

class MyTheme extends InheritedWidget {
  final Color color;

  MyTheme({required this.color, required Widget child}) : super(child: child);

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

  @override
  bool updateShouldNotify(MyTheme oldWidget) => color != oldWidget.color;
}

Tehát:

  • StatelessWidget — állapot nélküli
  • StatefulWidget — állapottal rendelkező
  • InheritedWidget — adatok továbbítása lefelé a widget fán