TGViewer
Flutter Friendly Flutter Friendly @flutterfriendly · 995 subscribers
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:

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
More from @flutterfriendly
  1. May 14, 2026👀Какой сложный вопрос или тема по Flutter вас сейчас беспокоят? Может, задача не идет, ба…
  2. Apr 17, 2026💭Привет! Это Роза, Flutter-разработчица Friflex! Уверена, многие из вас знакомы с Dart De…
  3. Apr 8, 2026Привет, друзья! Делимся нашей страничкой на Хабре, чтобы всегда оставаться на связи. Там е…
  4. Apr 3, 2026🌸Апрель в календаре и на экране Весна зовет обновлять визуальное: убирать темные темы и в…
  5. Apr 1, 2026Всегда с нетерпением ждем этого дня, чтобы сделать подборку ИТ-мемов Пусть поводов для улы…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →