Объясните основные отличия между StatefulWidget, StatelessWidget и InheritedWidget в контексте Flutter.
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 — для передачи данных вниз по дереву виджетов