Какой state manager выберешь для написания приложения с нуля

Ответ

Для нового приложения я бы выбрал Riverpod — он современный, гибкий и хорошо интегрируется с Flutter.

Почему Riverpod?

  • Null-safety из коробки.
  • Не зависит от BuildContext, что упрощает тестирование.
  • Поддержка автоматического управления состоянием (Provider, StateNotifier и т.д.).
  • Хорошая документация и активное сообщество.

Пример:

final counterProvider = StateNotifierProvider<Counter, int>((ref) => Counter());

class Counter extends StateNotifier<int> {
  Counter() : super(0);

  void increment() => state++;
}

// Использование в виджете
Consumer(
  builder: (context, ref, child) {
    final count = ref.watch(counterProvider);
    return Text('Count: $count');
  },
)

Если проект небольшой, можно использовать Provider, а для сложных стейтов — Bloc/Cubit. Но Riverpod — золотая середина.

Ответ 18+ 🔞

А, ну вот смотри, выбор библиотеки для стейта во Flutter — это как выбирать машину. Можно взять старенькую «девятку» — едет вроде, но жрёт бензина дохуя и каждые пять километров что-то отваливается. А можно взять что-то поновее, с кондиционером и подогревом сидений.

Так вот, для нового приложения я бы взял Riverpod. Это как новая иномарка, блядь. Современный, гибкий, и с Flutter он дружит так, будто они с одного завода сошли.

Ну и в чём прикол, спросишь?

  • Null-safety у него из коробки, ёпта. Не надо голову ломать, где может вылезти ошибка на ровном месте.
  • От BuildContext не зависит вообще. Это овердохуища удобно, когда пишешь тесты — не надо городить огород из виджетов, чтобы проверить логику. Чистая работа.
  • Поддерживает кучу способов управлять состоянием — там и Provider, и StateNotifier, и ещё хрен знает что. Бери что хочешь, как конструктор.
  • Документация у них норм, не какая-нибудь пиздопроебебина, а реально можно разобраться. И народ вокруг него толковый.

Смотри, как просто выглядит:

final counterProvider = StateNotifierProvider<Counter, int>((ref) => Counter());

class Counter extends StateNotifier<int> {
  Counter() : super(0);

  void increment() => state++;
}

// Использование в виджете
Consumer(
  builder: (context, ref, child) {
    final count = ref.watch(counterProvider);
    return Text('Count: $count');
  },
)
)

Видишь? Красиво, чётко, без лишнего геморроя. Если проект у тебя маленький, как квартирка в хрущёвке, то можно и старый добрый Provider взять — он свой хлеб съел. А если затеваешь небоскрёб с кучей сложной логики, то тогда да, Bloc/Cubit — это твой бронепоезд.

Но если по чесноку, Riverpod — это золотая середина, чувак. Не перегруженный, но и не голый. Как раз то, что надо для большинства проектов. Бери — не прогадаешь.