Ответ
В Dart и Flutter state (состояние) — это любые данные, которые могут изменяться в течение жизненного цикла виджета и которые влияют на то, что он отображает на экране. Изменение состояния должно приводить к перерисовке (rebuild) соответствующей части пользовательского интерфейса.
Ключевое отличие от обычных переменных: Состояние — это «живые» данные, привязанные к жизненному циклу UI. Простого изменения значения переменной недостаточно — фреймворк должен быть уведомлен об этом изменении, чтобы перестроить виджеты.
Базовый пример: локальное состояние в StatefulWidget
class CounterWidget extends StatefulWidget {
@override
_CounterWidgetState createState() => _CounterWidgetState();
}
class _CounterWidgetState extends State<CounterWidget> {
// Переменная `_counter` — это и есть состояние.
int _counter = 0;
void _increment() {
// Вызов setState() уведомляет Flutter, что состояние изменилось.
// Это приводит к повторному вызову метода build() данного State объекта.
setState(() {
_counter++;
});
}
@override
Widget build(BuildContext context) {
// UI перестраивается каждый раз, когда меняется _counter.
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('Счётчик: $_counter', style: TextStyle(fontSize: 24)),
ElevatedButton(
onPressed: _increment,
child: Text('Увеличить'),
),
],
);
}
}
Типы состояния в Flutter:
- Эфемерное (Ephemeral): Локальное состояние, живущее в одном виджете (как
_counterвыше). Управляется черезsetState(). - Управляемое (App state): Состояние, которым должны делиться несколько частей приложения (например, данные пользователя, корзина покупок). Для него используются решения вроде Provider, Riverpod, Bloc, GetX или Redux. Эти пакеты предоставляют механизмы для эффективного распространения изменений состояния и перерисовки только зависимых виджетов.
Принцип: Правильное управление состоянием — основа отзывчивого и предсказуемого Flutter-приложения.