
Explore Riverpod's advanced Flutter state management, including flexible state caching, async state handling, and easy rebuild optimization, while comparing it to Provider, Bloc, and Get, and noting its strong documentation.
Master riverpod fundamentals, async state with AsyncValue, provider lifecycles, and scoping, then build practical apps like a todo app, weather, and Firebase authentication using GoRouter.
Explore essential tools for Flutter Riverpod development in VSCode, including Dart and Flutter extensions, Awesome Flutter Snippet, Dart Import, Pubspec Assist, and Flutter Riverpod Snippets.
Explore Riverpod, a reactive caching framework for Flutter and Dart, and see how declarative and reactive state management with providers fetch, cache, and auto-refetch data with built-in error handling.
Learn to set up riverpod using flutter_riverpod for pure flutter apps, or hooks_riverpod and riverpod. Configure optional code generation with riverpod_annotation, build_runner, and riverpod_generator, and wrap your app with ProviderScope.
Discover how the.dart data class generator vscode extension speeds building data classes in flutter, generating constructors, toString, copyWith, fromJson, toJson, equality, and hashCode, with optional equatable.
Generate json serialization methods for a Dart data class using fromJson and toJson, fromMap and toMap, with an example of fetching users from a remote API.
Build a flutter user list ui with stateful page that fetches users from jsonplaceholder, uses a dart data class generator extension, and navigates to detail page with address and company.
An introduction to the freezed package in Dart 3, showing how sealed classes and pattern matching reduce reliance on techniques, and how to generate data classes with json_serializable via build_runner.
Learn how to create freezed data classes in Flutter, generating copyWith, toString, and equality, and how to make mutable variants with unfreezed, plus json_serializable support and defaults.
Learn to combine freezed with json_serializable for serialization of nested models. Model hotels and reviews with optional fields and camel/snake case mappings, then demonstrate fromJson and toJson.
Create a hotel list page in Flutter using a stateful widget, fetch hotels on load with setState, and render a padded list with dividers and optional reviews.
Explore Riverpod's provider foundation by learning how Provider creates values, how derived state and watching another provider work with todos, and how value overrides support mock and async init.
Flutter Riverpod essentials by building a provider app skeleton with autoDispose and family modifiers, project setup, dependencies, and a four-page navigation scaffold.
create the most basic Riverpod provider, declare helloProvider and worldProvider as global final variables, wrap the top widget in a ProviderScope, and read values with ref.watch.
discover how to dispose a provider with autoDispose in riverpod and apply the modifier across providers; convert pages to consumer widgets and read values with ref.watch.
Explore flutter_riverpod's family modifier with provider patterns, autoDispose interactions, and onDispose debugging, using ref.watch in ConsumerWidget to read parameterized providers like hello john and hello jane.
Learn how to pass multiple parameters to riverpod using a class with overridden hashCode and equality, and why primitives or immutable objects are preferred; explore autoDispose family and riverpod_generator tips.
Explore how the Flutter Riverpod Snippets extension in VS Code speeds provider creation, reduces typos, and boosts productivity, while comparing manual providers with riverpod_generator and noting its recommended advantages.
Learn to generate Riverpod providers using the Flutter Riverpod Snippets extension and riverpod_generator, comparing manual and code-generated providers, including autoDispose, keepAlive, and parameter handling.
This lecture shows how to create providers with the riverpod generator, using riverpod_annotation and riverpodPart, and explains lowercase riverpod versus uppercase Riverpod, plus testing.
Explore state providers for simple states in Riverpod, compare them with notifier providers, and learn read versus watch, counter logic, and minimal state management.
Learn how to create a state provider and compute state in RiverPad by using rep.watch to read a provider. Avoid rep.read, handle code generation warnings, and consider NotifyProvider for dependencies.
Learn to use the autodispose modifier with state providers in Riverpod, wiring autodispose age and counter providers, testing disposal on page navigation, and handling keepAlive interactions.
Explore state provider with the family modifier to create multiple counters with different initial values, including onDispose behavior and autoDispose options, and update logic to increment or decrement by 10.
Explore how FutureProvider and AsyncValue simplify handling async operations in Riverpod, covering loading, data, and error states with AsyncData, AsyncError, and AsyncLoading, plus the when method.
Learn to implement a FutureProvider using userListProvider to power the UserListPage in a Flutter Riverpod app, fetching jsonplaceholder users with dio and handling AsyncValue states with when.
Create a FutureProvider family to fetch individual user details from users/{id} using Dio, mapping responses to User and displaying on a UserDetailPage. Leverage code generation for Riverpod providers.
Explore flexible caching with FutureProvider by combining autoDispose and ref.keepAlive after get to preserve results across re-entry and control disposal and caching in Riverpod.
Use FutureProvider with ConsumerWidgets to reactively fetch data on UserListPage and UserDetailPage, replacing imperative initState calls; learn to refresh via ref.invalidate or ref.refresh, and implement pull-to-refresh with RefreshIndicator.
Master pull to refresh on the user detail page using a refresh indicator and always scrollable physics, with ref.refresh on a FutureProvider-based userDetailProvider and family provider disposal.
Master stream providers in Riverpod 3.0 by exposing and listening to changing data with async values, loading, data, and error states. Learn to build efficient, keep-alive streaming apps.
Expose and listen to a StateNotifier with StateNotifierProvider to centralize complex business logic and immutable state, demonstrated through a to-do app with add, toggle, and delete.
Explore state management in Flutter using Riverpod 3.0, focusing on StateNotifierProvider for UI tasks like adding, toggling, and removing todos, with wrap.watch and wrap.read usage.
Explore change notifier and change notifier provider in Riverpath, why they’re not recommended for mutable state in complex apps, and when to use notifier or async notifier providers.
Discover how notifier provider exposes a state notifier, lets you listen to state changes with immutable state, and uses a rep to watch, read, and implement counter logic.
Learn to build a counter with notifier provider using auto-dispose and family modifiers, and manage state with wrap.watch and wrap.read. The RealPath generator simplifies creating notifiers and providers.
Learn to use notifier providers with enum-based and sealed class state shapes in riverpod, building a boredapi activity app that fetches on page entry and on demand.
Create a NotifierProvider for EnumActivityState with ActivityStatus and Activity models, fetch data from boardAPI.com using dio, implement loading, success, and failure states, and wire up dio-provider and UI.
Learn to implement NotifierProvider-based state management with Riverpod 3.0 by building InomActivityPage that fetches activities and handles initial, loading, failure, and success states.
Explore how NotifierProvider manages EnumActivity state with listen, invalidate, and provider rebuild, using Future.delayed to defer updates, show dialogs on failure, and preserve previous data.
Explore modeling remote activity state with a sealedActivityState hierarchy in Dart 3, including sealedActivityInitial, sealedActivityLoading, sealedActivitySuccess, and sealedActivityFailure subtypes.
Build a sealed activity page using Riverpod NotifierProvider, handling SealedActivityLoading, SealedActivitySuccess, and SealedActivityFailure with pattern matching; fetch activity on page enter and show a dialog on failure.
Learn how to initialize remote data asynchronously in Riverpod by converting an enum-based notifier to an async notifier, replacing initState with reactive fetching, and managing initial state and errors.
Explore migrating from sealedActivity to sealedAsyncActivity in Riverpod, updating imports, state types, and provider logic to support async initialization, and preview AsyncNotifier and AsyncNotifierProvider.
Explore Flutter Riverpod's AsyncNotifier and AsyncNotifierProvider, using AsyncValue with AsyncLoading, AsyncData, and AsyncError to build a counter app with preserved state and error handling.
Learn to use the guard static method with AsyncNotifierProvider to simplify async data handling, transforming data with fromJSONFactory, and apply auto dispose and family modifiers via code generation.
Build an async activity viewer using AsyncNotifier and AsyncActivityProvider to fetch from Board API, with getActivity and fetchActivity, error dialogs, loading states, and a responsive UI.
Learn to extend AsyncValue with AsyncValueXX, add toStr and props getters, handle errors with skipError, use ref.listen and dialogs, and compare enum and sealed class state models in Riverpod.
Explore how StreamNotifierProvider replaces futures with stream-based state in Riverpod, building a timer app using timer states (initial, running, paused, finished) and a tick stream to drive UI.
Create a timer page in Flutter using Riverpod's stream notifier, building the timer value and action buttons, and wiring start, pause, resume, and reset actions with mayBeWhen handling AsyncData.
Explore async state handling with AsyncValue in RiverPod, covering Data, Loading, and Error states across FutureProvider, StreamProvider, and AsyncNotifyProvider, and how to preserve previous data during loading or errors.
Explore the methods of AsyncValue and AsyncValueX, including when, mayBeWhen, whenOrNull, copyWithPrevious, and how skipLoadingOnReload, skipLoadingOnRefresh, and skipError shape data, loading, and error states.
Follow a multi-city weather scenario to see how Riverpod handles async states, tracing isLoading, isReloading, hasValue, hasError, and value through async loading to data to error, with rep.invalidate concepts.
Create AsyncValueDetails using weatherFirstProvider for Seoul, London, Bangkok, and Tokyo via Riverpod code generation. Master AsyncValue states: loading, data, and error, in WeatherFirstPage and related widgets.
Explore how rep.invalidate and rep.refresh affect Riverpod weather data states, including isLoading, isRefreshing, async data, async error, and skipLoadingOnRefresh behavior.
Build a two-provider weather feature in Flutter Riverpod with cityProvider and weather-second provider. Use wrap.watch to track changes and study async loading, data, errors on the weather-second page.
Explore the Riverpod provider lifecycle, from uninitialized to disposed, including alive and paused states, and how read, watch, and listen affect lifecycle, with onDispose, auto-disposed, keepAlive, and custom cache.
Download the starter code for the provider_lifecycle app and learn how auto dispose and keep alive providers work with riverpod code generation and modifiers.
Explore the lifecycle of an auto-dispose provider in Riverpod, including initialization, disposal, cancellation, and resumption. Learn to use ref.watch, ref.listen, and ref.read to manage providers with consumer widgets.
Explore the lifecycle of a keepalive provider in Riverpod by building a counter notifier and UI with rep.watch and rep.read to handle state and increments.
Learn how to implement customized caching in Riverpod using keepAlive and autoDispose, managing sync and async state with timers, a keepAlive link, and lifecycle methods.
Use keepAlive to fetch product lists and a single product from dummyjson using riverpod and dio, while modeling data with freezed and fromJson and enabling request cancellation with CancelToken.
Create a products page and a product detail page using flutter_riverpod, display an async product list with loading and error states, and navigate to product details via productId.
Learn to control network requests with Riverpod by using keepAlive and cancelToken to cancel Dio calls, keep cached data, and implement a time-based cache for product lists and details.
Demonstrate the lifecycle of cascade providers by building a cascade counter and an age provider that uses watch to read the counter, showing rebuilds and lifecycle events.
Explore provider scope to handle state across a widget subtree. Use scope to optimize rebuilds, manage async init for dependencies like shared preferences, and isolate state in subtrees.
Learn how to use provider scope to optimize widget rebuilds in flutter, reducing redraws to newly added items and boosting performance for list views.
Learn how to optimize rebuilds in a Flutter Riverpod app by building an item list with add and delete functionality using a NotifyProvider, generated with build runner.
Optimize rebuilds in a Flutter Riverpod app by using provider scope to attach the current item provider to each item, so only new items redraw.
Learn to initialize asynchronous dependencies like sharedpreferences with Riverpod, manage scoped providers, and persist a counter across pages using notifierprovider and providerscope.
Explore how ProviderScope interacts with overlays and dialogs in Flutter, using a counter example to show unintended versus intended provider scope and how parent scopes control values.
Learn how to create a keepAlive counter provider in Riverpod, display and increment it across pages using ref.watch and ref.read, and explore overlay behavior with ProviderScope and dialog navigation.
Apply sub-tree scoping by overriding a provider in a sub-tree to change its action, such as 1 in parent and 10 in child, while considering new or family providers.
Explore subtree scoping in Riverpod by building a multi-section counter app, showing independent scoped providers, overrides, and keep alive behavior for add1, add10, and add100.
Explore subtree scoping in Riverpod by wiring dependent providers, managing dependencies, and using provider overrides to observe how changes propagate across widget subtrees.
Discover how RiverPod-Lint helps RiverPod users avoid common mistakes, validate provider scope, ensure proper provider parameters, and refactor to consumer widgets.
Explore the ProviderObserver in RiverPath, centralized for tracking provider initialization, disposal, and state changes. Learn how to override didAddProvider, didDisposeProvider, and didUpdateProvider with a sample app.
Learn how to use a provider observer in Riverpod to log provider lifecycle events—add, update, and dispose—across various providers like counter, notifier, future, stream, and state.
Explore RealPath 3 with a hands-on, 14-app curriculum that compares legacy and mutational approaches, covers offline persistence with SQLite and shared preferences, and builds reliability, generic support, and testing skills.
Configure static analysis with analysis-options.yml for RiverPod 3, add flutter lint and RiverPod lint, and exclude build and tool folders to prevent errors and streamline refactoring.
Welcome to the [Flutter Riverpod Essential] course, the most in-depth exploration of Riverpod—the standard for state management in Flutter.
This comprehensive course covers everything from the solid fundamentals of Riverpod 2 to the groundbreaking changes in the recently released Riverpod 3. We don’t just list theories. We adopt a “iterative, hands-on” approach, building small apps to test new concepts as they arise and internalizing them through large-scale, real-world projects.
In addition to the existing 19-hour, meticulously designed curriculum, this course now includes a new 5.5-hour [Riverpod 3 Masterclass] section. Now, master both the legacy of the past and the standard of the future in a single course.
What Makes This Course Special: [NEW] Riverpod 3 Masterclass (5.5 hours added)
In the newly updated Riverpod 3 sections, you’ll master Riverpod 3’s evolution into a data synchronization framework through a 10-step roadmap and 14 dedicated hands-on apps.
Implement 14 Dedicated Hands-On Apps: Directly compare Legacy (v2) and Modern (v3) approaches to gain a practical understanding of their structural differences.
Learn Innovative Features: Gain in-depth coverage of Mutation, the standard for asynchronous data changes, and Persistence, native offline support.
Practical Reliability: Get a complete guide to Automatic Retry, error prevention via `ref.mounted`, Generic Support, and end-to-end testing using enhanced Testing Utilities.
Curriculum Details
1. Fundamentals and Modern Data Management
Dart Data Class: Efficient data modeling using the Data Class Generator and the Freezed package
All Providers: Mastering all providers, from Provider to Notifier, AsyncNotifier, and StreamNotifier
All Modifiers: How to use autoDispose, family, and combinations
2. Advanced Control and Optimization
AsyncValue Deep Dive: Utilizing various properties and extension methods frequently used in real-world projects
Lifecycle & Scoping: Customizing provider lifecycles and scoping techniques for performance optimization
Riverpod Lint: Utilizing a powerful tool to prevent developer errors and boost productivity
3. Real-World Architecture and Library Integration
Pagination: Complete Implementation of Numbered Pagination and Infinite Scroll
Navigation: Examples of Seamless Integration Between Riverpod and GoRouter
Comprehensive Hands-On Projects (The Essence of Repetitive Learning)
We repeat the process until you fully master the concepts.
TODO App (Implemented 5 times total): Sync/Async, Enum/Sealed Class, AsyncValue, Hive Persistence
Weather App (Implemented 4 times total): AsyncValue, Pattern Matching, Geolocator Integration
Firebase Auth: Sign-up, Login, Email Verification, Password Change, etc.
Who is this course for?
Those who are new to Riverpod but want to learn it “properly,” from the basics to a practical level
Those currently using Riverpod 2 but want to immediately incorporate the latest changes in Riverpod 3 into their projects
Those who want to understand the practical aspects of persistence and mutations, which aren’t fully covered in the documentation
Those who want to understand the philosophy behind state management, rather than just copying code
What You’ll Achieve
By the time you finish this course, you’ll have moved beyond being a developer who simply uses state management libraries to become a senior-level developer with a deep understanding of modern data synchronization paradigms. After this 25-hour journey, your code will be simpler and your apps will be more robust.