Понимание использования 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.

Другие вопросы по тегам