State Management

Flutter Riverpod 3.0: Complete Migration Guide

Muhammad Shakil Muhammad Shakil
Feb 22, 2026
5 min read
Flutter Riverpod 3.0: Complete Migration Guide
Back to Blog

Riverpod 3.0 has arrived, and it’s a game-changer for Flutter state management. With over 1.5 million downloads on pub.dev and a growing community of developers, Riverpod has become the go-to solution for scalable, type-safe, and maintainable Flutter apps. However, migrating to Riverpod 3.0 isn’t just about updating dependencies—it’s about unlocking new features, improving performance, and future-proofing your codebase. Whether you’re upgrading from Riverpod 2.x or switching from another state management solution like BLoC or Provider, this guide will walk you through every step of the migration process.

TL;DR: Key Takeaways for Riverpod 3.0 Migration

  1. Riverpod 3.0 introduces Scoped Providers and Async Notifier, making state management more flexible and efficient.
  2. Migration requires updating dependencies, refactoring providers, and adopting new syntax patterns.
  3. The flutter_riverpod package now supports null safety and improved performance optimizations.
  4. Riverpod 3.0 outperforms BLoC and Provider in terms of bundle size and runtime efficiency.
  5. Common pitfalls include improper provider scoping and misusing ref.watch vs ref.read.
  6. Best practices include using autoDispose for memory management and leveraging family modifiers for parameterized providers.
  7. Real-world implementation shows how Riverpod 3.0 simplifies complex state management in production apps.

What is Riverpod 3.0 and Why Migrate?

Riverpod 3.0 is a major update to the popular Flutter state management library, designed to address common pain points in app development. It introduces scoped providers, which allow you to control the lifecycle of your state more precisely, and Async Notifier, a streamlined way to handle asynchronous operations. These features, combined with improved null safety and performance optimizations, make Riverpod 3.0 the most robust state management solution for Flutter yet.

New Features in Riverpod 3.0

Benefits of Migrating

Step-by-Step Migration Guide

Migrating to Riverpod 3.0 involves updating your dependencies, refactoring providers, and adopting new syntax patterns. Here’s a detailed breakdown of the process:

1. Update Dependencies

Start by updating your pubspec.yaml file to include the latest version of Riverpod:


        dependencies:
          flutter:
            sdk: flutter
          flutter_riverpod: ^3.0.0
        

2. Refactor Providers

Riverpod 3.0 introduces new provider types and syntax. Here’s how to refactor a simple provider:


        // Before (Riverpod 2.x)
        final counterProvider = StateProvider((ref) => 0);

        // After (Riverpod 3.0)
        final counterProvider = StateProvider((ref) => 0, name: 'counterProvider');
        

3. Adopt Async Notifier

Replace complex async logic with the new AsyncNotifier:


        class UserNotifier extends AsyncNotifier {
          @override
          Future build() async {
            return fetchUser();
          }
        }

        final userProvider = AsyncNotifierProvider(UserNotifier.new);
        

Riverpod 3.0 vs BLoC vs Provider

Choosing the right state management solution is critical for your app’s success. Here’s how Riverpod 3.0 stacks up against BLoC and Provider:

Performance Comparison

Ease of Use

When to Choose Riverpod 3.0

Common Pitfalls to Avoid

Migrating to Riverpod 3.0 can be tricky if you’re not careful. Here are common mistakes and how to fix them:

1. Misusing ref.watch vs ref.read

Wrong: Using ref.watch inside build methods unnecessarily.


        Widget build(BuildContext context, WidgetRef ref) {
          final value = ref.watch(someProvider); // Triggers unnecessary rebuilds
          return Text('$value');
        }
        

Right: Use ref.read for one-time reads.


        Widget build(BuildContext context, WidgetRef ref) {
          final value = ref.read(someProvider);
          return Text('$value');
        }
        

2. Improper Provider Scoping

Wrong: Using global providers for localized state.


        final globalProvider = StateProvider((ref) => 0);
        

Right: Use scoped providers for localized state.


        final scopedProvider = StateProvider((ref) => 0, name: 'scopedProvider');
        

3. Ignoring AutoDispose

Wrong: Not disposing of providers when no longer needed.


        final provider = StateProvider((ref) => 0);
        

Right: Use autoDispose for memory management.


        final provider = StateProvider.autoDispose((ref) => 0);
        

Performance Benchmarks and Best Practices

Riverpod 3.0 offers significant performance improvements over its predecessors. Here’s what you need to know:

Benchmark Results

Best Practices

Real-World Implementation Walkthrough

Let’s walk through a real-world example of migrating an e-commerce app to Riverpod 3.0:

Step 1: Update Dependencies

Update pubspec.yaml to include Riverpod 3.0:


        dependencies:
          flutter:
            sdk: flutter
          flutter_riverpod: ^3.0.0
        

Step 2: Refactor Cart Provider

Refactor the cart provider to use StateNotifier:


        final cartProvider = StateNotifierProvider>((ref) => CartNotifier());

        class CartNotifier extends StateNotifier> {
          CartNotifier() : super([]);

          void addItem(CartItem item) {
            state = [...state, item];
          }
        }
        

Step 3: Implement Async Notifier

Use AsyncNotifier for fetching product details:


        class ProductNotifier extends AsyncNotifier {
          @override
          Future build() async {
            return fetchProduct();
          }
        }

        final productProvider = AsyncNotifierProvider(ProductNotifier.new);
        

Final Thoughts and What’s Next

Migrating to Riverpod 3.0 is a worthwhile investment for any Flutter developer. With its improved performance, advanced features, and simplified architecture, Riverpod 3.0 sets a new standard for state management in Flutter. Start your migration today and experience the benefits firsthand.

🚀 What’s Next?

Ready to dive deeper? Check out our guide on Advanced Riverpod Patterns or explore how Riverpod compares to BLoC in our BLoC vs Riverpod comparison.

Frequently Asked Questions

What is Flutter Riverpod 3.0?

Flutter Riverpod 3.0 is the latest version of the Riverpod state management library for Flutter, offering improved syntax, better performance, and enhanced null safety. It introduces new features like `@riverpod` code generation and simplified provider declarations. This version requires Dart 2.17+ and Flutter 3.0+.

How to migrate to Riverpod 3.0?

To migrate to Riverpod 3.0, update your `pubspec.yaml` to use `riverpod: ^3.0.0`, run `flutter pub upgrade`, and refactor providers using the new `@riverpod` annotation. Replace deprecated syntax like `ProviderRef` with `Ref` and migrate stateful providers to the new generator pattern. The official migration guide provides step-by-step examples.

Why should I upgrade to Riverpod 3.0?

Riverpod 3.0 offers significant improvements like reduced boilerplate with code generation, better type inference, and enhanced dev tools. It also resolves common pain points from earlier versions, such as provider scoping complexity. The upgrade ensures compatibility with future Flutter/Dart updates.

Riverpod 2.0 vs 3.0: What changed?

Riverpod 3.0 replaces manual provider declarations with `@riverpod` code generation, eliminating `StateNotifierProvider`. It introduces `Ref` as a universal parameter instead of separate `ProviderRef`/`WidgetRef` types. The new version also simplifies async error handling with `AsyncValue` improvements.

How to use code generation in Riverpod 3.0?

Enable code generation by adding `riverpod_generator` and `build_runner` to dev dependencies. Annotate providers with `@riverpod` and define functions returning the state. Run `flutter pub run build_runner watch` to auto-generate provider classes. The generator creates type-safe providers with reduced boilerplate.

Can Riverpod 3.0 work with Flutter 2.x?

No, Riverpod 3.0 requires Flutter 3.0+ and Dart 2.17+ due to its reliance on newer language features like enhanced enums and generic metadata. Projects on Flutter 2.x must upgrade or continue using Riverpod 2.x, which lacks code generation and other 3.0 improvements.

Share this article:

Have an App Idea?

Let our team turn your vision into reality with Flutter.