Понимание использования StatefulWidget во Flutter
Я только начинаю возиться с Флаттером и не могу понять смысл StatefulWidget
, Все эти виджеты делают везде, где я видел учебники и т. Д. State<MyWidget>
и пусть он сделает всю работу.
Например, из этого (официального) урока:
class RandomWords extends StatefulWidget {
@override
createState() => new RandomWordsState();
}
class RandomWordsState extends State<RandomWords> {
...
}
То, что я хочу знать, это то, почему он построен таким образом и для чего нужен внешний класс (в моем примере RandomWords
).
Заранее спасибо.
4 ответа
"Внешний класс" final
каждый виджет final
, Это означает, что все его свойства должны быть final
также:
class RandomWords extends StatefulWidget {
final String name;
@override
createState() => new RandomWordsState();
}
class RandomWordsState extends State<RandomWords> {
String name;
@override
void initState() {
name = widget.name;
super.initState();
}
@override
Widget build(BuildContext context) => Text(name);
void someMethod() {
print(widget.name);
setState(() => name = 'new name');
}
}
От State
все поля StatefulWidget
могут быть доступны и, очевидно, не изменены, потому что они final
,
State
Однако, может изменить данные. setState
выполнит свой обратный вызов, а затем восстановить State
(с новыми данными).
StatelessWidget
Также можно перестроить, то есть когда его родитель перестраивается, но все состояние теряется и данные не сохраняются. Что это State
используются.
Во Flutter для создания пользовательского интерфейса мы используем два основных типа виджетов: StatelessWidget и StatefulWidget. Виджет с отслеживанием состояния используется, когда значения (состояние) виджета изменяются или имеют изменяемое состояние, которое может меняться со временем.
Некоторые важные свойства виджетов с отслеживанием состояния
- Виджет с отслеживанием состояния можно изменять. Он отслеживает состояние.
- Метод build() виджета с отслеживанием состояния вызывается несколько раз.
- Он перестраивается несколько раз за время своего существования.
Некоторые примеры виджетов с отслеживанием состояния
Флажок: сохраняет свое состояние независимо от того, установлен флажок или нет.
Радио: сохранить свое состояние, если оно выбрано или нет.
class MyStatefulWidget extends StatefulWidget { @override _MyStatefulWidgetState createState() => _MyStatefulWidgetState(); } class _MyStatefulWidgetState extends State<MyStatefulWidget> { @override Widget build(BuildContext context) { return Container(); } }
Отслеживание состояния виджета объявляются с двумя классами, в классе StatefulWidget и государственный классом. Класс StatefulWidget перестраивается при изменении конфигурации виджета, но класс State может сохраняться (оставаться).
Например, при изменении состояния виджет перестраивается. Если StatefulWidget удаляется из дерева, а затем снова вставляется в дерево через некоторое время, создается новый объект State.
виджет без состояния похож на постоянное отображение, например, только для отображения чего-то с состоянием для изменяемого отображения, я имею в виду, что если какое-либо значение должно измениться на этом экране, тогда оно должно быть с состоянием
Из того, что я понимаю, это сохранить информацию о виджете. Таким образом, вы реализуете setState каждый раз, когда хотите сохранить переменную или что-то еще. Смотрите учебник о добавлении интерактивности в Flutter.