Sobes.tech
Back to questions
Junior — Middle
141

Объясните основные отличия между StatefulWidget, StatelessWidget и InheritedWidget в контексте Flutter.

Companies where asked
mobifitness
Grotem

Answer from AI

sobes.tech AI

StatelessWidget — это виджет без состояния. Он строится один раз и не меняет свой внешний вид, если не изменятся входные параметры. Используется для отображения статического UI.

StatefulWidget — виджет с состоянием. Он может изменять свой внешний вид в ответ на события или изменения данных. Для этого создаётся отдельный объект State, который управляет состоянием и вызывает перерисовку.

InheritedWidget — специальный виджет, который позволяет передавать данные вниз по дереву виджетов без необходимости явно прокидывать их через конструкторы. Используется для реализации глобального состояния или общих данных, к которым могут обращаться дочерние виджеты.

Пример использования InheritedWidget для передачи темы:

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;
}

Таким образом:

  • StatelessWidget — без состояния
  • StatefulWidget — с состоянием
  • InheritedWidget — для передачи данных вниз по дереву виджетов