Upgrade Flutter packages and fix breaking changes for Riverpod 3.0

Major package upgrades:
- Riverpod 2.x → 3.0.3 (breaking changes)
- flutter_appauth 7.0.0 → 11.0.0
- go_router 14.0.0 → 17.0.0
- permission_handler 11.3.0 → 12.0.1
- flutter_lints 5.0.0 → 6.0.0
- animate_do 3.1.2 → 4.2.0
- Plus 41 transitive dependency updates

Breaking changes fixed:

Riverpod 3.0 migration:
- Replace StateProvider with NotifierProvider pattern
- Update .valueOrNull to proper async value handling with .future
- Create LanguageNotifier and ThemeModeNotifier classes
- Fix all provider async value access patterns

Google Maps Navigation API updates:
- Rename GoogleMapsNavigationViewController to GoogleNavigationViewController
- Update Waypoint to NavigationWaypoint.withLatLngTarget
- Migrate controller methods to static GoogleMapsNavigator methods
- Update event listener types and callbacks

Localization system fixes:
- Update l10n.yaml synthetic-package configuration
- Fix import paths from flutter_gen to package imports
- Add errorTitle translation key for both en/fr
- Remove unnecessary null-aware operators (AppLocalizations is non-nullable)
- Regenerate localization files

iOS/macOS configuration:
- Update CocoaPods dependencies (AppAuth 1.7.5 → 2.0.0)
- Create missing Profile.xcconfig files for both platforms
- Sync Podfile.lock files with updated dependencies

Code quality:
- Fix all analyzer errors (0 errors remaining)
- Resolve deprecated API usage warnings
- Update async/await patterns for better error handling

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Jean-Philippe Brule
2025-11-16 01:25:16 -05:00
parent 96c9e59cf0
commit d8bdaed63e
16 changed files with 272 additions and 171 deletions
+23 -9
View File
@@ -37,7 +37,7 @@ final authTokenProvider = FutureProvider<String?>((ref) async {
});
final deliveryRoutesProvider = FutureProvider<List<DeliveryRoute>>((ref) async {
final token = ref.watch(authTokenProvider).valueOrNull;
final token = await ref.read(authTokenProvider.future);
if (token == null) {
throw Exception('User not authenticated');
@@ -70,7 +70,7 @@ final deliveryRoutesProvider = FutureProvider<List<DeliveryRoute>>((ref) async {
});
final deliveriesProvider = FutureProvider.family<List<Delivery>, int>((ref, routeFragmentId) async {
final token = ref.watch(authTokenProvider).valueOrNull;
final token = await ref.read(authTokenProvider.future);
if (token == null) {
throw Exception('User not authenticated');
@@ -103,7 +103,7 @@ final deliveriesProvider = FutureProvider.family<List<Delivery>, int>((ref, rout
/// Provider to get all deliveries from all routes
final allDeliveriesProvider = FutureProvider<List<Delivery>>((ref) async {
final routes = ref.watch(deliveryRoutesProvider).valueOrNull ?? [];
final routes = await ref.read(deliveryRoutesProvider.future);
if (routes.isEmpty) {
return [];
@@ -127,14 +127,28 @@ final allDeliveriesProvider = FutureProvider<List<Delivery>>((ref) async {
return allDeliveries;
});
final languageProvider = StateProvider<String>((ref) {
return 'fr';
// Language notifier for state management
class LanguageNotifier extends Notifier<String> {
@override
String build() => 'fr';
void setLanguage(String lang) => state = lang;
}
final languageProvider = NotifierProvider<LanguageNotifier, String>(() {
return LanguageNotifier();
});
/// Theme mode provider for manual theme switching
/// Default is ThemeMode.dark for testing
final themeModeProvider = StateProvider<ThemeMode>((ref) {
return ThemeMode.dark;
// Theme mode notifier for manual theme switching
class ThemeModeNotifier extends Notifier<ThemeMode> {
@override
ThemeMode build() => ThemeMode.dark;
void setThemeMode(ThemeMode mode) => state = mode;
}
final themeModeProvider = NotifierProvider<ThemeModeNotifier, ThemeMode>(() {
return ThemeModeNotifier();
});
class _EmptyQuery implements Serializable {