Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
764 of 1024 menu
◀ ▶

Класс StatefulWidget

Класс StatefulWidget наследует Widget и объявляет createState. Изменяемые поля хранят в State, а сам виджет остаётся неизменяемым. Обновление экрана запускают через setState.

Синтаксис

class Counter extends StatefulWidget { const Counter({super.key}); @override State<Counter> createState() => _CounterState(); }

Параметры

Параметр Описание
key Ключ виджета для идентификации в дереве.

Методы

Метод Описание
createState Вызывается один раз, когда элемент впервые попадает в дерево. Давайте разберём вызов на примерах.

Пример

Давайте объявим StatefulWidget со счётчиком:

import 'package:flutter/material.dart'; void main() { runApp( MaterialApp( home: Scaffold( body: Center( child: Counter(), ), ), ), ); } class Counter extends StatefulWidget { const Counter({super.key}); @override State<Counter> createState() => _CounterState(); } class _CounterState extends State<Counter> { int value = 0; @override Widget build(BuildContext context) { return Column( mainAxisSize: MainAxisSize.min, children: [ Text('$value'), ElevatedButton( onPressed: () => setState(() => value++), child: const Text('abcde'), ), ], ); } }

На экране число и кнопка 'abcde'; по нажатию счётчик растёт.

Пример

Давайте передадим начальное значение через параметр виджета:

import 'package:flutter/material.dart'; void main() { runApp( MaterialApp( home: Scaffold( body: Center( child: Counter(start: 5), ), ), ), ); } class Counter extends StatefulWidget { const Counter({super.key, this.start = 0}); final int start; @override State<Counter> createState() => _CounterState(); } class _CounterState extends State<Counter> { late int value; @override void initState() { super.initState(); value = widget.start; } @override Widget build(BuildContext context) { return Text('$value'); } }

На экране сразу покажется число 5 из параметра start.

Смотрите также

  • метод createState,
    который создаёт State
  • класс State,
    который хранит данные между кадрами
  • класс StatelessWidget,
    который обходится без State
  • виджет StatefulBuilder,
    который даёт setState без отдельного класса
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить