
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.
Build a hotel list UI with HotelListPage, using setState to fetch data, show loading indicator, and display hotels' details via Freezed data class with JSON serialization and union sealed classes.
Discover the provider in RealPath, a simple value creator that supplies a repository or http client to widgets and other providers, including watching another provider.
Build a provider-based flutter app skeleton with riverpod 3.0, set up dependencies and linting, and create four provider configurations (basic, auto-dispose, family, auto-dispose family) across a pages and widgets layout.
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 use the autodispose modifier in Riverpod to automatically dispose unused providers, convert widgets to consumers, and decide when to keep or fetch fresh state.
Explore using Riverpod's family and autoDispose.family modifiers to create parameterized providers, read them with ref.watch, observe disposal behavior, and understand limitations with multiple parameters.
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.
Learn to create Flutter Riverpod providers using the Flutter Leopard SunyPath VS Code extension and the Leopard generator, with a preference for code generation over manual coding.
Create Riverpod providers with the real-path Cinepads extension, compare manual versus code-generated providers, and learn to use build runner for auto-dispose, keep-alive, and hot reload.
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 FutureProviderFamily to fetch a user by id via Dio, convert with User.fromJSONFactory, and render on the UserDetailPage, using code generation.
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.
Learn how FutureProvider manages user list data across pages and how Invalidate and Refresh force provider disposal and reloading, enabling pull-to-refresh and button-initiated refresh without manual state handling.
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 implement a NotifierProvider that fetches Board API activity data and handles state shapes: InonBasedState, SealedClassBasedState, and AsyncValue, for loading, success, and failure UI, including an activity data model.
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.
Master NotifierProvider patterns by implementing EnumActivity with listen and invalidate to rebuild the UI, defer provider changes with future.delayed, and manage error dialogs while preserving previous activity 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 enumAsyncActivityProvider enables asynchronous state with AsyncNotifier, contrasting it with synchronously initialized Notifier and imperative API calls, and see refactoring steps from InonBaseState to async data fetching.
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.
Extend AsyncValue with AsyncValue.xx to create a toStr getter and a props getter, manage loading and error states, show dialogs on errors, and control refresh with skipError.
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.
build a timer page with Riverpod stream notifier, featuring timer value and action button widgets, handling async states (initial, running, paused, finished) and mm:ss formatting.
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.
Learn how AsyncValue and AsyncValueX methods like when (and its skip flags), maybeWhen, and map drive UI with AsyncData, AsyncLoading, and AsyncError, using copyWithPrevious to preserve state.
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.
Explore the app skeleton for Riverpod lifecycle, detailing auto-dispose and keepalive providers, code-generation defaults, and page navigation scaffolds across autodispose, keepalive, provider cascade, and sync keepalive pages.
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.
Explore customized caching with Riverpod by keeping state alive using the keep alive method for both synchronous and asynchronous state, controlling disposal with auto-dispose and keep alive links.
Learn to fetch product lists and single product details from dummyjson using riverpod providers with keep-alive and pagination, modeling product data and handling requests with dio.
Create a product list page that reads async products with Riverpod using get-products and when, then navigate to the product-page and a product-detail page with a product-id.
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.
Optimize widget rebuilds with ProviderScope in Flutter Riverpod by isolating list view item builders, avoiding full redraws when adding or removing items, and dramatically boosting app performance.
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 handling dependencies between providers, using provider scope and overrides, and ensuring dependent providers declare dependencies to avoid errors.
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.