Канал Friflex о разработке на Flutter. Обновления, плагины, полезные материалы — превращаем знания в реальный опыт, доступный каждому разработчику.
🔗 Наш канал для разработчиков: @friflex_dev
🔗 Канал о продуктовой разработке: @friflex_product
Post #219
673

🔗Привет, это Катя, Flutter Dev Friflex
Сегодня поговорим про архитектуру — разберемся, чем отличается ephemeral state от app state во Flutter и как с ними работать.
Что такое state?
В самом широком смысле, state — это все, что хранится в памяти приложения во время его работы: шрифты, текстуры, анимации, UI, переменные.
Но управляем мы далеко не всем. Например, за текстуры отвечает сам Flutter. Нам важнее другое определение:
👉 State — это данные, необходимые для перестроения UI в любой момент времени.
Ephemeral state (локальное состояние)
Ephemeral state (еще называют UI state или локальным состоянием) — это данные, которые можно «замкнуть» в рамках одного виджета.
Примеры:
▫️текущая страница в PageView
▫️выбранный таб в BottomNavigationBar
▫️прогресс анимации
Такое состояние:
✔️не нужно сохранять между сессиями
✔️не нужно шарить по всему приложению
✔️меняется локально
Обычно для него достаточно StatefulWidget + setState().
Пример с BottomNavigationBar:
Здесь _index — это ephemeral state. Он живет только в этом экране и спокойно сбрасывается при перезапуске приложения.
App state (глобальное состояние)
App state (или shared state) — это данные, которые:
▫️нужны разным экранам
▫️должны сохраняться между сессиями
▫️определяют ключевую бизнес-логику
Примеры:
▪️данные пользователя (логин, токен)
▪️настройки и предпочтения
▪️корзина в e-commerce
▪️уведомления или список непрочитанных статей
Для управления app state часто используют:
✔️Provider / Riverpod — декларативный state management
✔️Redux / BLoC — для сложных приложений
✔️Hive / SharedPreferences — для сохранения на диск
Нет универсального правила. Важно понимать: граница между ephemeral и app state условная.
Например, выбранный таб в BottomNavigationBar может быть ephemeral state (если он нужен только внутри экрана), но стать app state, если:
▪️нужно восстанавливать его при повторном входе
▪️он влияет на другие части приложения
Автор Redux, Дэн Абрамов, говорил:
То есть используйте то решение, которое проще и естественнее именно в вашем случае.
Если кратко:
Во Flutter есть два типа состояния:
✔️Ephemeral state — локальный, простой, живет в одном виджете, управляется через setState()
✔️App state — общий, сложный, нужен разным экранам и сохраняется между сессиями
Идеальный подход — гибко сочетать оба вида в зависимости от задач.
Сегодня поговорим про архитектуру — разберемся, чем отличается ephemeral state от app state во Flutter и как с ними работать.
Что такое state?
В самом широком смысле, state — это все, что хранится в памяти приложения во время его работы: шрифты, текстуры, анимации, UI, переменные.
Но управляем мы далеко не всем. Например, за текстуры отвечает сам Flutter. Нам важнее другое определение:
👉 State — это данные, необходимые для перестроения UI в любой момент времени.
Ephemeral state (локальное состояние)
Ephemeral state (еще называют UI state или локальным состоянием) — это данные, которые можно «замкнуть» в рамках одного виджета.
Примеры:
▫️текущая страница в PageView
▫️выбранный таб в BottomNavigationBar
▫️прогресс анимации
Такое состояние:
✔️не нужно сохранять между сессиями
✔️не нужно шарить по всему приложению
✔️меняется локально
Обычно для него достаточно StatefulWidget + setState().
Пример с BottomNavigationBar:
class MyHomepage extends StatefulWidget {
const MyHomepage({super.key});
@override
State<MyHomepage> createState() => _MyHomepageState();
}
class _MyHomepageState extends State<MyHomepage> {
int _index = 0;
@override
Widget build(BuildContext context) {
return BottomNavigationBar(
currentIndex: _index,
onTap: (newIndex) {
setState(() {
_index = newIndex;
});
},
// ... items ...
);
}
}Здесь _index — это ephemeral state. Он живет только в этом экране и спокойно сбрасывается при перезапуске приложения.
App state (глобальное состояние)
App state (или shared state) — это данные, которые:
▫️нужны разным экранам
▫️должны сохраняться между сессиями
▫️определяют ключевую бизнес-логику
Примеры:
▪️данные пользователя (логин, токен)
▪️настройки и предпочтения
▪️корзина в e-commerce
▪️уведомления или список непрочитанных статей
Для управления app state часто используют:
✔️Provider / Riverpod — декларативный state management
✔️Redux / BLoC — для сложных приложений
✔️Hive / SharedPreferences — для сохранения на диск
Нет универсального правила. Важно понимать: граница между ephemeral и app state условная.
Например, выбранный таб в BottomNavigationBar может быть ephemeral state (если он нужен только внутри экрана), но стать app state, если:
▪️нужно восстанавливать его при повторном входе
▪️он влияет на другие части приложения
Автор Redux, Дэн Абрамов, говорил:
«The rule of thumb is: Do whatever is less awkward»
То есть используйте то решение, которое проще и естественнее именно в вашем случае.
Если кратко:
Во Flutter есть два типа состояния:
✔️Ephemeral state — локальный, простой, живет в одном виджете, управляется через setState()
✔️App state — общий, сложный, нужен разным экранам и сохраняется между сессиями
Идеальный подход — гибко сочетать оба вида в зависимости от задач.
- ❤ 6
- 👍 4
- 🔥 4












