Ответ
Для нового приложения я бы выбрал 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 — это золотая середина, чувак. Не перегруженный, но и не голый. Как раз то, что надо для большинства проектов. Бери — не прогадаешь.