flutter · 7 min read

BLoC vs Riverpod: choose by how your team works

Both BLoC and Riverpod can support a maintainable Flutter app. Choose the state model your team can explain and test. BLoC makes transitions explicit through events and states; Riverpod represents dependencies and state through providers. Neither substitutes for a clear repository boundary.

How the pieces connect

User actionState ownerRepositoryNew UI state

A starting folder structure

features/catalog/
  data/catalog_repository.dart
  presentation/
    catalog_page.dart
    state/
      catalog_bloc.dart      # BLoC option
      catalog_provider.dart  # Riverpod alternative

BLoC favors explicit event vocabulary

Events such as SearchSubmitted and NextPageRequested provide a shared language between UI and state logic. This is useful for complex workflows and teams that value consistent transition patterns. The cost is more files and careful management of event concurrency. Cubit removes the event layer for simpler state changes.

Riverpod models a dependency graph

Providers compose cached values and services, while Notifier and AsyncNotifier own changing state. A screen watches only what it needs. Provider overrides make repository substitution straightforward in tests. Pay attention to provider lifetime and invalidation: a provider is not automatically a durable store.

Handle asynchronous races deliberately

Neither library makes search requests arrive in order. Decide whether to cancel stale requests, ignore older results, or serialize operations. Represent loading and failures alongside data so a failed refresh need not erase a usable list. Test two requests completing in the opposite order.

Choose one primary state system

Use BLoC when explicit events and transition traces fit the team. Use Riverpod when dependency composition and async derived state dominate. Avoid mixing both throughout the same feature without a clear boundary. Migrate one feature at a time through existing repository contracts.

Try this configuration

Clean Architecture · Riverpod · Riverpod DI · Dio

The generator includes a working counter example with a repository contract, selected dependencies, navigation, and local setup instructions. Extend the example around your own domain before shipping.

Configure your Flutter project →

Continue reading

Primary references

Flutter application architecture documentation explains architectural recommendations. For state APIs, consult Riverpod documentation and BLoC documentation.