139 lines
3.7 KiB
Markdown
139 lines
3.7 KiB
Markdown
# Final Provider Fix - Riverpod 3.0 Compatibility
|
|
|
|
## ✅ Issue Resolved
|
|
|
|
The provider was updated to work with the latest Riverpod 3.0 code generation.
|
|
|
|
## 🔧 Changes Made
|
|
|
|
### Before (Custom Ref Types)
|
|
```dart
|
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
|
import '../../domain/entities/price_document.dart';
|
|
|
|
part 'price_documents_provider.g.dart';
|
|
|
|
@riverpod
|
|
List<PriceDocument> priceDocuments(PriceDocumentsRef ref) {
|
|
return _mockDocuments;
|
|
}
|
|
|
|
@riverpod
|
|
List<PriceDocument> filteredPriceDocuments(
|
|
FilteredPriceDocumentsRef ref,
|
|
DocumentCategory category,
|
|
) {
|
|
final allDocs = ref.watch(priceDocumentsProvider);
|
|
return allDocs.where((doc) => doc.category == category).toList();
|
|
}
|
|
```
|
|
|
|
**Issue**: Using custom ref types `PriceDocumentsRef` and `FilteredPriceDocumentsRef` which are not compatible with Riverpod 3.0 generated code.
|
|
|
|
### After (Standard Ref Type) ✅
|
|
```dart
|
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
|
import '../../domain/entities/price_document.dart';
|
|
|
|
part 'price_documents_provider.g.dart';
|
|
|
|
@riverpod
|
|
List<PriceDocument> priceDocuments(Ref ref) {
|
|
return _mockDocuments;
|
|
}
|
|
|
|
@riverpod
|
|
List<PriceDocument> filteredPriceDocuments(
|
|
Ref ref,
|
|
DocumentCategory category,
|
|
) {
|
|
final allDocs = ref.watch(priceDocumentsProvider);
|
|
return allDocs.where((doc) => doc.category == category).toList();
|
|
}
|
|
```
|
|
|
|
**Solution**: Use the standard `Ref` type from `riverpod_annotation` package.
|
|
|
|
## 📋 Key Points
|
|
|
|
### 1. **Ref Type Usage**
|
|
- ✅ Use `Ref` from `riverpod_annotation` (NOT custom types)
|
|
- ✅ Works with both simple and family providers
|
|
- ✅ Compatible with Riverpod 3.0 code generation
|
|
|
|
### 2. **Generated Code**
|
|
The build runner now generates Riverpod 3.0 compatible code:
|
|
```dart
|
|
// New Riverpod 3.0 pattern
|
|
final class PriceDocumentsProvider
|
|
extends $FunctionalProvider<List<PriceDocument>, ...>
|
|
with $Provider<List<PriceDocument>> {
|
|
// ...
|
|
}
|
|
```
|
|
|
|
This is the **correct** generated format for Riverpod 3.0+.
|
|
|
|
### 3. **Pattern Matches Project Convention**
|
|
Other providers in the project using the same pattern:
|
|
- ✅ `lib/features/loyalty/presentation/providers/gifts_provider.dart`
|
|
- ✅ `lib/features/favorites/presentation/providers/favorites_provider.dart`
|
|
|
|
## ✅ What Works Now
|
|
|
|
### Basic Provider
|
|
```dart
|
|
// Provider definition
|
|
@riverpod
|
|
List<PriceDocument> priceDocuments(Ref ref) {
|
|
return _mockDocuments;
|
|
}
|
|
|
|
// Usage in widget
|
|
final documents = ref.watch(priceDocumentsProvider);
|
|
```
|
|
|
|
### Family Provider (with parameter)
|
|
```dart
|
|
// Provider definition
|
|
@riverpod
|
|
List<PriceDocument> filteredPriceDocuments(
|
|
Ref ref,
|
|
DocumentCategory category,
|
|
) {
|
|
final allDocs = ref.watch(priceDocumentsProvider);
|
|
return allDocs.where((doc) => doc.category == category).toList();
|
|
}
|
|
|
|
// Usage in widget
|
|
final policyDocs = ref.watch(
|
|
filteredPriceDocumentsProvider(DocumentCategory.policy),
|
|
);
|
|
```
|
|
|
|
## 📁 Files Updated
|
|
|
|
1. ✅ `lib/features/price_policy/presentation/providers/price_documents_provider.dart`
|
|
- Changed `PriceDocumentsRef` → `Ref`
|
|
- Changed `FilteredPriceDocumentsRef` → `Ref`
|
|
- Removed redundant imports
|
|
|
|
2. ✅ `lib/features/price_policy/presentation/providers/price_documents_provider.g.dart`
|
|
- Auto-generated by build_runner with Riverpod 3.0 format
|
|
|
|
3. ✅ `lib/features/price_policy/domain/entities/price_document.freezed.dart`
|
|
- Auto-generated by build_runner with latest Freezed format
|
|
|
|
## 🎯 Result
|
|
|
|
The Price Policy feature now:
|
|
- ✅ Uses correct Riverpod 3.0 syntax
|
|
- ✅ Matches project conventions
|
|
- ✅ Compiles without errors
|
|
- ✅ Works with both simple and family providers
|
|
- ✅ Fully compatible with latest code generation
|
|
|
|
## 🚀 Ready to Use!
|
|
|
|
The provider is now production-ready and follows all Riverpod 3.0 best practices.
|