← Назад к вопросам

Для чего нужен StatefulWidget?

1.0 Junior🔥 241 комментариев
#Flutter виджеты

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

StatefulWidget — основной паттерн для изменяемого состояния

StatefulWidget — это базовый класс в Flutter для создания виджетов, которые могут менять своё состояние в процессе жизненного цикла приложения. В отличие от StatelessWidget, который рендерится один раз и не обновляется, StatefulWidget позволяет отслеживать и обновлять данные в реальном времени.

Основные назначения StatefulWidget

1. Управление изменяемым состоянием

  • Хранение данных, которые могут измениться (текст в TextField, значение счётчика, флаги toggle)
  • Реактивное обновление UI при изменении этих данных
  • Вызов метода setState() для пересчёта виджета
class Counter extends StatefulWidget {
  @override
  State<Counter> createState() => _CounterState();
}

class _CounterState extends State<Counter> {
  int count = 0;

  void increment() {
    setState(() {
      count++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Text(count.toString());
  }
}

2. Жизненный цикл и инициализация

  • Метод initState() вызывается один раз при создании State — используется для инициализации контроллеров, слушателей, загрузки данных
  • Метод dispose() вызывается при удалении виджета — очищаем ресурсы, отписываемся от stream, закрываем контроллеры
  • Методы didUpdateWidget() и deactivate() позволяют отслеживать изменения родительского виджета

3. Интерактивность и реактивность

  • Обработка пользовательских действий (нажатия кнопок, ввод текста, скролл)
  • Асинхронные операции (API запросы, базе данных, таймеры)
  • Обновление UI после получения результатов

4. Управление контекстом и зависимостями

  • Доступ к BuildContext для навигации, темам, медиа-запросам
  • Передача данных между виджетами через параметры конструктора

Когда использовать StatefulWidget

  • Формы с инпутами — отслеживание введённого текста
  • Анимации — контроль состояния анимации, таймеры
  • Списки иGrid — скролл, фильтрация, пагинация
  • Сложные UI — многошаговые процессы, модальные окна, системы вкладок

Performance: когда StatefulWidget становится узким местом

Если виджет часто перестраивается, это может быть неэффективно. Решения:

  • Вынести изменяемое состояние в отдельный StatefulWidget с минимальным деревом
  • Использовать const конструкторы для неизменяемых подвиджетов
  • Применить Provider, Bloc или Riverpod для управления состоянием на уровне приложения

StatefulWidget — это фундамент Flutter, без которого невозможно создать интерактивное приложение. Правильное использование его жизненного цикла — ключ к производительности и стабильности.