
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 VS Code tools for flutter riverpod, including the Dart and Flutter extensions, Pubspec Assist, dart-import, and Dart data class generator, plus 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 dynamic Flutter user list interface by fetching users from jsonplaceholder, handling loading and errors, and navigating to detailed user pages with generated data classes.
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 in Flutter with a HotelListPage StatefulWidget that uses setState to fetch hotels, shows a loading indicator, and renders a ListView.separated of hotel items with reviews.
Learn how riverpod's provider pattern supplies values to widgets, derives computed state like completed todos, and uses overrides for development and asynchronous initialization, with starter code for apps.
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.
Use the family modifier to pass a name to a provider that returns hello plus the name, creating autoDispose-enabled, separate providers for John and Jane with onDispose traces.
Learn how to pass multiple parameters to Riverpod family providers by using objects with overridden hashCode and equality, and use equatable or freezed to ensure correct provider disposal.
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.
Compute derived state with a StateProvider by watching a counterProvider and returning a string like 'Hi, I am $age years old.' Explore ref.watch over ref.read and code generation notes.
Refactor a basic state provider into autoDispose providers, renaming to autoDisposeCounterProvider and autoDisposeAgeProvider, and use the update function to modify state based on previous value.
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.
Discover how Riverpod StreamProvider exposes and listens to streams with AsyncValue, including loading, data, and error states. Compare with FutureProvider and learn practical use in a ticker app.
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 implementing a ChangeNotifierProvider in Riverpod to manage a mutable todo list, learn when to use or avoid ChangeNotifier, and compare with NotifierProvider and AsyncNotifierProvider.
Discover how NotifierProvider unlocks access to a Notifier with immutable state and synchronous initialization, demonstrated in a counter app and boredapi activity data demo with a ref.
Learn to build a counter with NotifierProvider using autoDispose and family modifiers in riverpod. Read state with ref.watch, update with ref.read, and test UI behavior across restarts while leveraging riverpod_generator.
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 an enum_activity state and a NotifierProvider using Riverpod, fetch data from boredapi.com with Dio, and manage ActivityStatus states (initial, loading, success, failure) for the EnumActivityState and UI.
Learn to build an enum activity page using Riverpod notifiers, fetch activity from the bored API in initState, and display loading, failure, or success states with a dedicated ActivityWidget.
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.
Learn to replace enum states with a sealed class hierarchy in Dart 3, using SealedActivityState variants and a sealed Riverpod provider to manage bored API results.
Create a sealed activity page using Riverpod's notifier provider, handling loading, success, and failure states with enhanced switch pattern matching to fetch activity from the boared API on page enter.
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.
Refactor sealed activity to sealed async activity, update provider and state names, and print constructors and initialization traces; discuss asynchronous initialization with AsyncNotifier in Riverpod.
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.
Learn to build a timer app with stream notifier in riverpod, modeling timer states (initial, running, paused, finished) and handling start, pause, resume, and reset via a StreamNotifierProvider.
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.
Watch how a weather fetch sequence in Riverpod updates state from async loading to async data or async error across cities, illustrating isLoading, isReloading, hasValue, hasError, value, and error handling.
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.
Create cityProvider and weatherSecondProvider with riverpod, using NotifierProvider and a FutureProvider to switch Cities enum values and watch AsyncValue states via ref.watch in WeatherSecondPage.
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 autoDispose providers with Riverpod, using Notifier and ref.listen versus ref.watch, handling onDispose and onCancel, and optimizing user interface 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 manage async network requests with dio and CancelToken in Riverpod, using keepAlive and autoDispose to cancel, dispose, and cache getProductsProvider and getProductProvider.
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 wrapping EachItem with a ProviderScope and overriding a per-item currentItemProvider, so only new or changed 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.
Explore how subtree scoping overrides a provider within a specific widget subtree to yield different behavior, and compare it with creating a new provider or using a family provider.
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.
ProviderObserver centralizes provider lifecycle tracking in Riverpod, including didAddProvider, didDisposeProvider, and didUpdateProvider. Use the name property and runtimeType to identify providers during initialization and state changes.
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.
Discover Riverpod 3's new features and updated approach through a hands-on course, building 14 apps and exploring mutations, offline persistence, and testing utilities.
Configure static analysis with an analysis_options.yaml file, enabling Flutter and Riverpod lint, ignore invalid annotation target warnings, and exclude build and generated files.
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.