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

Что такое state в Dart?

1.2 Junior🔥 121 комментариев
#Dart

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

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

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

Что такое State в Dart

State в контексте Dart и Flutter — это переменные и данные, которые хранят информацию о текущем состоянии объекта или приложения. State определяет, как выглядит и поведётся виджет в каждый конкретный момент времени.

Типы State

Stateless Widget — виджет без состояния. Это неизменяемый виджет, который не может изменяться после создания. Используется для статического контента:

class MyButton extends StatelessWidget {
  final String label;
  
  const MyButton({required this.label});
  
  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: () {},
      child: Text(label),
    );
  }
}

Stateful Widget — виджет с состоянием. Он может изменяться во время жизненного цикла. Используется, когда нужна интерактивность:

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

class _CounterState extends State<Counter> {
  int count = 0;
  
  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        Text("Count: $count"),
        ElevatedButton(
          onPressed: () {
            setState(() {
              count++;
            });
          },
          child: const Text("Increment"),
        ),
      ],
    );
  }
}

setState() — ключевой метод

setState() — вызывает перестроение виджета при изменении данных:

setState(() {
  // Изменяешь переменные здесь
  userName = "John";
});
// После этого build() вызывается снова

Управление State на разных уровнях

Local State — состояние внутри одного виджета (самое простое).

Shared State — состояние, которое нужно нескольким виджетам. Решается через Provider, Riverpod или BLoC.

// Пример с Provider
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ChangeNotifierProvider(
      create: (_) => MyModel(),
      child: Consumer<MyModel>(
        builder: (context, model, _) {
          return Text("Value: ${model.value}");
        },
      ),
    );
  }
}

Lifecycle State

Когда создаёшь Stateful Widget, его State проходит через циклы:

  • initState() — вызывается один раз при создании
  • build() — отрисовывает виджет
  • dispose() — вызывается при удалении виджета

Понимание State критически для разработки на Flutter, так как всё основано на управлении состоянием и перестроении виджетов при его изменении.

Что такое state в Dart? | PrepBro