State Management Flutter: Provider vs Riverpod vs BLoC
Artikel ringkas ini membantu memilih pola state management yang tepat berdasarkan kompleksitas aplikasi, kebutuhan testability, dan preferensi tim.
Gambaran Cepat
-
Provider
- Kelebihan: ringan, sederhana, bawaan ekosistem; mudah untuk pemula.
- Kekurangan: boilerplate di skala besar; dependency graph bisa membesar.
- Cocok: app kecil-menengah, tim baru di Flutter.
-
Riverpod (rekomendasi umum)
- Kelebihan: compile-safety, testability lebih baik, provider bebas context, generator (Riverpod Generator) mengurangi boilerplate.
- Kekurangan: butuh pemahaman konsep provider + ref; tooling tambahan.
- Cocok: app menengah-besar, modular, butuh maintainability.
-
BLoC/Cubit
- Kelebihan: arsitektur terstruktur (input event → state), sangat testable, cocok tim besar.
- Kekurangan: lebih banyak boilerplate, kurva belajar lebih tinggi.
- Cocok: app kompleks, domain logic berat, kolaborasi besar.
Contoh Minimal
Provider
class Counter with ChangeNotifier {
int value = 0;
void inc() { value++; notifyListeners(); }
}
ChangeNotifierProvider(
create: (_) => Counter(),
child: Consumer<Counter>(
builder: (_, c, __) => Text('${c.value}')
),
);
Riverpod
final counterProvider = StateProvider<int>((ref) => 0);
Consumer(builder: (_, ref, __) {
final count = ref.watch(counterProvider);
return Text('$count');
});
// update
ref.read(counterProvider.notifier).state++;
BLoC (Cubit)
class CounterCubit extends Cubit<int> { CounterCubit(): super(0); void inc()=>emit(state+1); }
BlocProvider(
create: (_) => CounterCubit(),
child: BlocBuilder<CounterCubit, int>(builder: (_, s) => Text('$s')),
);
Testing Singkat
- Provider: uji langsung instance
ChangeNotifierdan UI viapumpWidget. - Riverpod: gunakan
ProviderContainer/ProviderScopeuntuk unit/widget test. - BLoC: gunakan
bloc_testuntuk memverifikasi alur event→state.
Rekomendasi Pemilihan
- Mulai dari Riverpod untuk keseimbangan ergonomi, skalabilitas, dan testability.
- Provider untuk prototype/fitur sederhana.
- BLoC untuk domain kompleks dan kebutuhan aturan arsitektur yang ketat.
Ringkasan
Tidak ada “satu pemenang untuk semua”. Sesuaikan dengan ukuran tim, kompleksitas, dan target maintainability. Investasi di konvensi coding dan testing akan memberi hasil lebih besar daripada perbedaan library itu sendiri.
💬 Komentar
⏳ Memuat komentar...
Tulis Komentar