diff --git a/ios/Flutter/Profile.xcconfig b/ios/Flutter/Profile.xcconfig new file mode 100644 index 0000000..73272fc --- /dev/null +++ b/ios/Flutter/Profile.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig" +#include "Generated.xcconfig" diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 9b60be5..82a80b0 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1,13 +1,13 @@ PODS: - - AppAuth (1.7.5): - - AppAuth/Core (= 1.7.5) - - AppAuth/ExternalUserAgent (= 1.7.5) - - AppAuth/Core (1.7.5) - - AppAuth/ExternalUserAgent (1.7.5): + - AppAuth (2.0.0): + - AppAuth/Core (= 2.0.0) + - AppAuth/ExternalUserAgent (= 2.0.0) + - AppAuth/Core (2.0.0) + - AppAuth/ExternalUserAgent (2.0.0): - AppAuth/Core - Flutter (1.0.0) - flutter_appauth (0.0.1): - - AppAuth (= 1.7.5) + - AppAuth (= 2.0.0) - Flutter - flutter_secure_storage (6.0.0): - Flutter @@ -70,9 +70,9 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/url_launcher_ios/ios" SPEC CHECKSUMS: - AppAuth: 501c04eda8a8d11f179dbe8637b7a91bb7e5d2fa + AppAuth: 1c1a8afa7e12f2ec3a294d9882dfa5ab7d3cb063 Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467 - flutter_appauth: 273bf736e38f7d85000b1a9ac15ace5800c277f2 + flutter_appauth: d4abcf54856e5d8ba82ed7646ffc83245d4aa448 flutter_secure_storage: 1ed9476fba7e7a782b22888f956cce43e2c62f13 google_navigation_flutter: aff5e273b19113b8964780ff4e899f6f2e07f6dc GoogleMaps: 9ce9c898074e96655acaf1ba5d6f85991ecee7a3 diff --git a/lib/components/navigation_tc_dialog.dart b/lib/components/navigation_tc_dialog.dart index 5cd4070..9fab231 100644 --- a/lib/components/navigation_tc_dialog.dart +++ b/lib/components/navigation_tc_dialog.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:planb_logistic/l10n/app_localizations.dart'; class NavigationTermsAndConditionsDialog extends StatelessWidget { final VoidCallback onAccept; @@ -18,7 +18,7 @@ class NavigationTermsAndConditionsDialog extends StatelessWidget { return AlertDialog( title: Text( - l10n?.navigationTcTitle ?? 'Navigation Service', + l10n.navigationTcTitle, style: Theme.of(context).textTheme.headlineSmall?.copyWith( color: colorScheme.onSurface, ), @@ -29,24 +29,21 @@ class NavigationTermsAndConditionsDialog extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - l10n?.navigationTcDescription ?? - 'This app uses Google Navigation to provide turn-by-turn navigation for deliveries.', + l10n.navigationTcDescription, style: Theme.of(context).textTheme.bodyMedium?.copyWith( color: colorScheme.onSurface, ), ), const SizedBox(height: 16), Text( - l10n?.navigationTcAttribution ?? - 'Attribution: Maps and navigation services provided by Google Maps.', + l10n.navigationTcAttribution, style: Theme.of(context).textTheme.bodySmall?.copyWith( color: colorScheme.onSurfaceVariant, ), ), const SizedBox(height: 12), Text( - l10n?.navigationTcTerms ?? - 'By accepting, you agree to Google\'s Terms of Service and Privacy Policy for Navigation services.', + l10n.navigationTcTerms, style: Theme.of(context).textTheme.bodySmall?.copyWith( color: colorScheme.onSurfaceVariant, ), @@ -62,7 +59,7 @@ class NavigationTermsAndConditionsDialog extends StatelessWidget { onDecline!(); }, child: Text( - l10n?.decline ?? 'Decline', + l10n.decline, style: TextStyle(color: colorScheme.error), ), ), @@ -72,7 +69,7 @@ class NavigationTermsAndConditionsDialog extends StatelessWidget { onAccept(); }, child: Text( - l10n?.accept ?? 'Accept', + l10n.accept, style: TextStyle(color: colorScheme.primary), ), ), diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 399ced0..3e231c7 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -80,6 +80,7 @@ "openSettings": "Open Settings", "cancel": "Cancel", "ok": "OK", + "errorTitle": "Error", "requestPermission": "Request Permission", "navigationArrived": "You have arrived at the destination", "navigatingTo": "Navigating to", diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb index c253907..bac88b7 100644 --- a/lib/l10n/app_fr.arb +++ b/lib/l10n/app_fr.arb @@ -80,6 +80,7 @@ "openSettings": "Ouvrir les paramtres", "cancel": "Annuler", "ok": "OK", + "errorTitle": "Erreur", "requestPermission": "Demander la permission", "navigationArrived": "Vous tes arriv la destination", "navigatingTo": "Navigation vers", diff --git a/lib/l10n/app_localizations.dart b/lib/l10n/app_localizations.dart index 49ff46b..e24a372 100644 --- a/lib/l10n/app_localizations.dart +++ b/lib/l10n/app_localizations.dart @@ -416,6 +416,12 @@ abstract class AppLocalizations { /// **'OK'** String get ok; + /// No description provided for @errorTitle. + /// + /// In en, this message translates to: + /// **'Error'** + String get errorTitle; + /// No description provided for @requestPermission. /// /// In en, this message translates to: diff --git a/lib/l10n/app_localizations_en.dart b/lib/l10n/app_localizations_en.dart index 5e9a4fe..d55e6b8 100644 --- a/lib/l10n/app_localizations_en.dart +++ b/lib/l10n/app_localizations_en.dart @@ -183,6 +183,9 @@ class AppLocalizationsEn extends AppLocalizations { @override String get ok => 'OK'; + @override + String get errorTitle => 'Error'; + @override String get requestPermission => 'Request Permission'; diff --git a/lib/l10n/app_localizations_fr.dart b/lib/l10n/app_localizations_fr.dart index 1aa9662..c0e9790 100644 --- a/lib/l10n/app_localizations_fr.dart +++ b/lib/l10n/app_localizations_fr.dart @@ -183,6 +183,9 @@ class AppLocalizationsFr extends AppLocalizations { @override String get ok => 'OK'; + @override + String get errorTitle => 'Erreur'; + @override String get requestPermission => 'Demander la permission'; diff --git a/lib/pages/deliveries_page.dart b/lib/pages/deliveries_page.dart index 0836a23..d38b63c 100644 --- a/lib/pages/deliveries_page.dart +++ b/lib/pages/deliveries_page.dart @@ -63,7 +63,8 @@ class _DeliveriesPageState extends ConsumerState { Widget build(BuildContext context) { final deliveriesData = ref.watch(deliveriesProvider(widget.routeFragmentId)); final routesData = ref.watch(deliveryRoutesProvider); - final token = ref.watch(authTokenProvider).valueOrNull; + final tokenAsync = ref.watch(authTokenProvider); + final token = tokenAsync.hasValue ? tokenAsync.value : null; return Scaffold( appBar: AppBar( diff --git a/lib/pages/navigation_page.dart b/lib/pages/navigation_page.dart index fce94ee..e69a893 100644 --- a/lib/pages/navigation_page.dart +++ b/lib/pages/navigation_page.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:google_navigation_flutter/google_navigation_flutter.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:planb_logistic/l10n/app_localizations.dart'; import '../models/delivery.dart'; import '../services/location_permission_service.dart'; import '../components/navigation_tc_dialog.dart'; @@ -186,8 +186,7 @@ class _NavigationPageState extends ConsumerState { }, denied: () { _showErrorDialog( - AppLocalizations.of(context)?.locationPermissionDenied ?? - 'Location permission denied. Navigation cannot proceed.', + AppLocalizations.of(context).locationPermissionDenied, ); widget.onNavigationCancelled?.call(); }, @@ -233,7 +232,7 @@ class _NavigationPageState extends ConsumerState { showDialog( context: context, builder: (context) => AlertDialog( - title: Text(AppLocalizations.of(context)?.error ?? 'Error'), + title: Text(AppLocalizations.of(context).errorTitle), content: Text(message), actions: [ TextButton( @@ -241,7 +240,7 @@ class _NavigationPageState extends ConsumerState { Navigator.of(context).pop(); widget.onNavigationCancelled?.call(); }, - child: Text(AppLocalizations.of(context)?.ok ?? 'OK'), + child: Text(AppLocalizations.of(context).ok), ), ], ), diff --git a/lib/providers/providers.dart b/lib/providers/providers.dart index ad7b536..920c384 100644 --- a/lib/providers/providers.dart +++ b/lib/providers/providers.dart @@ -37,7 +37,7 @@ final authTokenProvider = FutureProvider((ref) async { }); final deliveryRoutesProvider = FutureProvider>((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>((ref) async { }); final deliveriesProvider = FutureProvider.family, 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, int>((ref, rout /// Provider to get all deliveries from all routes final allDeliveriesProvider = FutureProvider>((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>((ref) async { return allDeliveries; }); -final languageProvider = StateProvider((ref) { - return 'fr'; +// Language notifier for state management +class LanguageNotifier extends Notifier { + @override + String build() => 'fr'; + + void setLanguage(String lang) => state = lang; +} + +final languageProvider = NotifierProvider(() { + return LanguageNotifier(); }); -/// Theme mode provider for manual theme switching -/// Default is ThemeMode.dark for testing -final themeModeProvider = StateProvider((ref) { - return ThemeMode.dark; +// Theme mode notifier for manual theme switching +class ThemeModeNotifier extends Notifier { + @override + ThemeMode build() => ThemeMode.dark; + + void setThemeMode(ThemeMode mode) => state = mode; +} + +final themeModeProvider = NotifierProvider(() { + return ThemeModeNotifier(); }); class _EmptyQuery implements Serializable { diff --git a/lib/services/navigation_session_service.dart b/lib/services/navigation_session_service.dart index 9f9a262..2fcd70e 100644 --- a/lib/services/navigation_session_service.dart +++ b/lib/services/navigation_session_service.dart @@ -11,7 +11,7 @@ class NavigationSessionService { NavigationSessionService._internal(); bool _isSessionInitialized = false; - GoogleMapsNavigationViewController? _controller; + GoogleNavigationViewController? _controller; bool get isSessionInitialized => _isSessionInitialized; @@ -21,7 +21,7 @@ class NavigationSessionService { } try { - await GoogleMapsNavigationViewController.initializeNavigationSession(); + await GoogleMapsNavigator.initializeNavigationSession(); _isSessionInitialized = true; } catch (e) { throw NavigationSessionException('Failed to initialize session: $e'); @@ -29,7 +29,7 @@ class NavigationSessionService { } Future setController( - GoogleMapsNavigationViewController controller, + GoogleNavigationViewController controller, ) async { _controller = controller; } @@ -59,15 +59,19 @@ class NavigationSessionService { longitude: destinationLongitude, ); - final waypoint = Waypoint( + final waypoint = NavigationWaypoint.withLatLngTarget( + title: 'Destination', target: destination, ); - // Set destinations will trigger route calculation - await _controller!.setDestinations( - destinations: [waypoint], + final destinations = Destinations( + waypoints: [waypoint], + displayOptions: NavigationDisplayOptions(showDestinationMarkers: true), ); + // Set destinations will trigger route calculation + await GoogleMapsNavigator.setDestinations(destinations); + return NavigationRoute( startLocation: origin, endLocation: destination, @@ -79,76 +83,80 @@ class NavigationSessionService { } Future startNavigation() async { - if (!_isSessionInitialized || _controller == null) { + if (!_isSessionInitialized) { throw NavigationSessionException('Navigation not properly initialized'); } try { - await _controller!.startGuidance(); + await GoogleMapsNavigator.startGuidance(); } catch (e) { throw NavigationSessionException('Failed to start navigation: $e'); } } Future stopNavigation() async { - if (_controller == null) { + if (!_isSessionInitialized) { return; } try { - await _controller!.stopGuidance(); + await GoogleMapsNavigator.stopGuidance(); } catch (e) { throw NavigationSessionException('Failed to stop navigation: $e'); } } void addLocationListener( - Function(LatLng location) onLocationUpdate, + Function(RoadSnappedLocationUpdatedEvent event) onLocationUpdate, ) { - if (_controller == null) { - throw NavigationSessionException('Controller not set'); + if (!_isSessionInitialized) { + throw NavigationSessionException('Navigation not initialized'); } - _controller!.addOnLocationUpdatedListener((location) { - onLocationUpdate(location); + GoogleMapsNavigator.setRoadSnappedLocationUpdatedListener((event) { + onLocationUpdate(event); }); } - void addArrivalListener(Function(NavInfo info) onArrival) { - if (_controller == null) { - throw NavigationSessionException('Controller not set'); + void addArrivalListener(Function(OnArrivalEvent event) onArrival) { + if (!_isSessionInitialized) { + throw NavigationSessionException('Navigation not initialized'); } - _controller!.addOnArrivalListener((info) { - onArrival(info); + GoogleMapsNavigator.setOnArrivalListener((event) { + onArrival(event); }); } + // Note: Remaining distance listener API may vary by version + // This is a placeholder for future implementation void addRemainingDistanceListener( - Function(int distanceMeters) onDistanceChange, + Function(dynamic event) onDistanceChange, ) { - if (_controller == null) { - throw NavigationSessionException('Controller not set'); + if (!_isSessionInitialized) { + throw NavigationSessionException('Navigation not initialized'); } - - _controller!.addOnRemainingDistanceChangedListener((distance) { - onDistanceChange(distance); - }); + // TODO: Implement when correct API is available + // GoogleMapsNavigator does not expose a public remaining distance listener } void clearAllListeners() { - if (_controller == null) { + if (!_isSessionInitialized) { return; } - _controller!.removeAllListeners(); + // Clear listeners by setting them to empty callbacks + // Note: The API doesn't support null, so we use no-op callbacks + GoogleMapsNavigator.setRoadSnappedLocationUpdatedListener((_) {}); + GoogleMapsNavigator.setOnArrivalListener((_) {}); } Future cleanup() async { try { - if (_controller != null) { + if (_isSessionInitialized) { await stopNavigation(); clearAllListeners(); + await GoogleMapsNavigator.cleanup(); } _isSessionInitialized = false; _controller = null; diff --git a/macos/Flutter/Flutter-Profile.xcconfig b/macos/Flutter/Flutter-Profile.xcconfig new file mode 100644 index 0000000..40f342f --- /dev/null +++ b/macos/Flutter/Flutter-Profile.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/macos/Podfile.lock b/macos/Podfile.lock index 9441af1..b73a576 100644 --- a/macos/Podfile.lock +++ b/macos/Podfile.lock @@ -1,14 +1,14 @@ PODS: - - AppAuth (1.7.5): - - AppAuth/Core (= 1.7.5) - - AppAuth/ExternalUserAgent (= 1.7.5) - - AppAuth/Core (1.7.5) - - AppAuth/ExternalUserAgent (1.7.5): + - AppAuth (2.0.0): + - AppAuth/Core (= 2.0.0) + - AppAuth/ExternalUserAgent (= 2.0.0) + - AppAuth/Core (2.0.0) + - AppAuth/ExternalUserAgent (2.0.0): - AppAuth/Core - file_selector_macos (0.0.1): - FlutterMacOS - flutter_appauth (0.0.1): - - AppAuth (= 1.7.5) + - AppAuth (= 2.0.0) - FlutterMacOS - flutter_secure_storage_macos (6.1.3): - FlutterMacOS @@ -52,9 +52,9 @@ EXTERNAL SOURCES: :path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos SPEC CHECKSUMS: - AppAuth: 501c04eda8a8d11f179dbe8637b7a91bb7e5d2fa + AppAuth: 1c1a8afa7e12f2ec3a294d9882dfa5ab7d3cb063 file_selector_macos: 9e9e068e90ebee155097d00e89ae91edb2374db7 - flutter_appauth: 9e1412df1f0d76b2460e6657d01d4f866496fe88 + flutter_appauth: 84cbf57c7926a898a612726e99241a031e33fac3 flutter_secure_storage_macos: 7f45e30f838cf2659862a4e4e3ee1c347c2b3b54 FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1 path_provider_foundation: bb55f6dbba17d0dccd6737fe6f7f34fbd0376880 diff --git a/pubspec.lock b/pubspec.lock index 1f95cc2..d4b541e 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,34 +5,42 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: da0d9209ca76bde579f2da330aeb9df62b6319c834fa7baae052021b0462401f + sha256: f0bb5d1648339c8308cc0b9838d8456b3cfe5c91f9dc1a735b4d003269e5da9a url: "https://pub.dev" source: hosted - version: "85.0.0" + version: "88.0.0" analyzer: dependency: transitive description: name: analyzer - sha256: f4ad0fea5f102201015c9aae9d93bc02f75dd9491529a8c21f88d17a8523d44c + sha256: "0b7b9c329d2879f8f05d6c05b32ee9ec025f39b077864bdb5ac9a7b63418a98f" url: "https://pub.dev" source: hosted - version: "7.6.0" + version: "8.1.1" + analyzer_buffer: + dependency: transitive + description: + name: analyzer_buffer + sha256: aba2f75e63b3135fd1efaa8b6abefe1aa6e41b6bd9806221620fa48f98156033 + url: "https://pub.dev" + source: hosted + version: "0.1.11" analyzer_plugin: dependency: transitive description: name: analyzer_plugin - sha256: a5ab7590c27b779f3d4de67f31c4109dbe13dd7339f86461a6f2a8ab2594d8ce + sha256: dd574a0ab77de88b7d9c12bc4b626109a5ca9078216a79041a5c24c3a1bd103c url: "https://pub.dev" source: hosted - version: "0.13.4" + version: "0.13.7" animate_do: dependency: "direct main" description: name: animate_do - sha256: b6ff08dc6cf3cb5586a86d7f32a3b5f45502d2e08e3fb4f5a484c8421c9b3fc0 + sha256: e5c8b92e8495cba5adfff17c0b017d50f46b2766226e9faaf68bc08c91aef034 url: "https://pub.dev" source: hosted - version: "3.3.9" + version: "4.2.0" archive: dependency: transitive description: @@ -69,50 +77,34 @@ packages: dependency: transitive description: name: build - sha256: "51dc711996cbf609b90cbe5b335bbce83143875a9d58e4b5c6d3c4f684d3dda7" + sha256: dfb67ccc9a78c642193e0c2d94cb9e48c2c818b3178a86097d644acdcde6a8d9 url: "https://pub.dev" source: hosted - version: "2.5.4" + version: "4.0.2" build_config: dependency: transitive description: name: build_config - sha256: "4ae2de3e1e67ea270081eaee972e1bd8f027d459f249e0f1186730784c2e7e33" + sha256: "4f64382b97504dc2fcdf487d5aae33418e08b4703fc21249e4db6d804a4d0187" url: "https://pub.dev" source: hosted - version: "1.1.2" + version: "1.2.0" build_daemon: dependency: transitive description: name: build_daemon - sha256: "409002f1adeea601018715d613115cfaf0e31f512cb80ae4534c79867ae2363d" + sha256: bf05f6e12cfea92d3c09308d7bcdab1906cd8a179b023269eed00c071004b957 url: "https://pub.dev" source: hosted - version: "4.1.0" - build_resolvers: - dependency: transitive - description: - name: build_resolvers - sha256: ee4257b3f20c0c90e72ed2b57ad637f694ccba48839a821e87db762548c22a62 - url: "https://pub.dev" - source: hosted - version: "2.5.4" + version: "4.1.1" build_runner: dependency: "direct dev" description: name: build_runner - sha256: "382a4d649addbfb7ba71a3631df0ec6a45d5ab9b098638144faf27f02778eb53" + sha256: "7b5b569f3df370590a85029148d6fc66c7d0201fc6f1847c07dd85d365ae9fcd" url: "https://pub.dev" source: hosted - version: "2.5.4" - build_runner_core: - dependency: transitive - description: - name: build_runner_core - sha256: "85fbbb1036d576d966332a3f5ce83f2ce66a40bea1a94ad2d5fc29a19a0d3792" - url: "https://pub.dev" - source: hosted - version: "9.1.2" + version: "2.10.3" built_collection: dependency: transitive description: @@ -145,6 +137,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.4" + cli_config: + dependency: transitive + description: + name: cli_config + sha256: ac20a183a07002b700f0c25e61b7ee46b23c309d76ab7b7640a028f18e4d99ec + url: "https://pub.dev" + source: hosted + version: "0.2.0" clock: dependency: transitive description: @@ -177,6 +177,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.1.2" + coverage: + dependency: transitive + description: + name: coverage + sha256: "5da775aa218eaf2151c721b16c01c7676fbfdd99cebba2bf64e8b807a28ff94d" + url: "https://pub.dev" + source: hosted + version: "1.15.0" cross_file: dependency: transitive description: @@ -189,10 +197,10 @@ packages: dependency: transitive description: name: crypto - sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" + sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf url: "https://pub.dev" source: hosted - version: "3.0.6" + version: "3.0.7" cupertino_icons: dependency: "direct main" description: @@ -205,26 +213,26 @@ packages: dependency: transitive description: name: custom_lint_core - sha256: "31110af3dde9d29fb10828ca33f1dce24d2798477b167675543ce3d208dee8be" + sha256: "85b339346154d5646952d44d682965dfe9e12cae5febd706f0db3aa5010d6423" url: "https://pub.dev" source: hosted - version: "0.7.5" + version: "0.8.1" custom_lint_visitor: dependency: transitive description: name: custom_lint_visitor - sha256: "4a86a0d8415a91fbb8298d6ef03e9034dc8e323a599ddc4120a0e36c433983a2" + sha256: "446d68322747ec1c36797090de776aa72228818d3d80685a91ff524d163fee6d" url: "https://pub.dev" source: hosted - version: "1.0.0+7.7.0" + version: "1.0.0+8.1.1" dart_style: dependency: transitive description: name: dart_style - sha256: "8a0e5fba27e8ee025d2ffb4ee820b4e6e2cf5e4246a6b1a477eb66866947e0bb" + sha256: c87dfe3d56f183ffe9106a18aebc6db431fc7c98c31a54b952a77f3d54a85697 url: "https://pub.dev" source: hosted - version: "3.1.1" + version: "3.1.2" fake_async: dependency: transitive description: @@ -269,10 +277,10 @@ packages: dependency: transitive description: name: file_selector_platform_interface - sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b + sha256: "35e0bd61ebcdb91a3505813b055b09b79dfdc7d0aee9c09a7ba59ae4bb13dc85" url: "https://pub.dev" source: hosted - version: "2.6.2" + version: "2.7.0" file_selector_windows: dependency: transitive description: @@ -306,26 +314,26 @@ packages: dependency: "direct main" description: name: flutter_appauth - sha256: "84e8753fe20864da241892823ff7dbd252baa34f1649d6feb48118e8ae829ed1" + sha256: aba94ecd7aa542240c54c6bb0a875a577c73e9460c199dc74fe58e89e7a98a1a url: "https://pub.dev" source: hosted - version: "7.0.1" + version: "11.0.0" flutter_appauth_platform_interface: dependency: transitive description: name: flutter_appauth_platform_interface - sha256: "0959824b401f3ee209c869734252bd5d4d4aab804b019c03815c56e3b9a4bc34" + sha256: "6c3c2f3a0060a2bf34880ca75b997b675f148275659c6abe2ff15d0819861259" url: "https://pub.dev" source: hosted - version: "7.0.1" + version: "11.0.0" flutter_lints: dependency: "direct dev" description: name: flutter_lints - sha256: "5398f14efa795ffb7a33e9b6a08798b26a180edac4ad7db3f231e40f82ce11e1" + sha256: "3105dc8492f6183fb076ccf1f351ac3d60564bff92e20bfc4af9cc1651f4e7e1" url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "6.0.0" flutter_localizations: dependency: "direct main" description: flutter @@ -343,10 +351,10 @@ packages: dependency: "direct main" description: name: flutter_riverpod - sha256: "9532ee6db4a943a1ed8383072a2e3eeda041db5657cdf6d2acecf3c21ecbe7e1" + sha256: "9e2d6907f12cc7d23a846847615941bddee8709bf2bfd274acdf5e80bcf22fde" url: "https://pub.dev" source: hosted - version: "2.6.1" + version: "3.0.3" flutter_secure_storage: dependency: "direct main" description: @@ -449,10 +457,10 @@ packages: dependency: "direct main" description: name: go_router - sha256: f02fd7d2a4dc512fec615529824fdd217fecb3a3d3de68360293a551f21634b3 + sha256: c92d18e1fe994cb06d48aa786c46b142a5633067e8297cff6b5a3ac742620104 url: "https://pub.dev" source: hosted - version: "14.8.1" + version: "17.0.0" google_navigation_flutter: dependency: "direct main" description: @@ -473,10 +481,10 @@ packages: dependency: "direct main" description: name: http - sha256: bb2ce4590bc2667c96f318d68cac1b5a7987ec819351d32b1c987239a815e007 + sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412" url: "https://pub.dev" source: hosted - version: "1.5.0" + version: "1.6.0" http_interceptor: dependency: "direct main" description: @@ -513,10 +521,10 @@ packages: dependency: "direct main" description: name: image_picker - sha256: "736eb56a911cf24d1859315ad09ddec0b66104bc41a7f8c5b96b4e2620cf5041" + sha256: "784210112be18ea55f69d7076e2c656a4e24949fa9e76429fe53af0c0f4fa320" url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.1" image_picker_android: dependency: transitive description: @@ -609,10 +617,10 @@ packages: dependency: "direct dev" description: name: json_serializable - sha256: c50ef5fc083d5b5e12eef489503ba3bf5ccc899e487d691584699b4bdefeea8c + sha256: "33a040668b31b320aafa4822b7b1e177e163fc3c1e835c6750319d4ab23aa6fe" url: "https://pub.dev" source: hosted - version: "6.9.5" + version: "6.11.1" jwt_decoder: dependency: "direct main" description: @@ -649,10 +657,10 @@ packages: dependency: transitive description: name: lints - sha256: c35bb79562d980e9a453fc715854e1ed39e24e7d0297a880ef54e17f9874a9d7 + sha256: a5e2b223cb7c9c8efdc663ef484fdd95bb243bff242ef5b13e26883547fce9a0 url: "https://pub.dev" source: hosted - version: "5.1.1" + version: "6.0.0" logging: dependency: transitive description: @@ -701,6 +709,22 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.0" + mockito: + dependency: transitive + description: + name: mockito + sha256: "4feb43bc4eb6c03e832f5fcd637d1abb44b98f9cfa245c58e27382f58859f8f6" + url: "https://pub.dev" + source: hosted + version: "5.5.1" + node_preamble: + dependency: transitive + description: + name: node_preamble + sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" + url: "https://pub.dev" + source: hosted + version: "2.0.2" package_config: dependency: transitive description: @@ -769,18 +793,18 @@ packages: dependency: "direct main" description: name: permission_handler - sha256: "59adad729136f01ea9e35a48f5d1395e25cba6cea552249ddbe9cf950f5d7849" + sha256: bc917da36261b00137bbc8896bf1482169cd76f866282368948f032c8c1caae1 url: "https://pub.dev" source: hosted - version: "11.4.0" + version: "12.0.1" permission_handler_android: dependency: transitive description: name: permission_handler_android - sha256: d3971dcdd76182a0c198c096b5db2f0884b0d4196723d21a866fc4cdea057ebc + sha256: "1e3bc410ca1bf84662104b100eb126e066cb55791b7451307f9708d4007350e6" url: "https://pub.dev" source: hosted - version: "12.1.0" + version: "13.0.1" permission_handler_apple: dependency: transitive description: @@ -865,34 +889,34 @@ packages: dependency: transitive description: name: riverpod - sha256: "59062512288d3056b2321804332a13ffdd1bf16df70dcc8e506e411280a72959" + sha256: c406de02bff19d920b832bddfb8283548bfa05ce41c59afba57ce643e116aa59 url: "https://pub.dev" source: hosted - version: "2.6.1" + version: "3.0.3" riverpod_analyzer_utils: dependency: transitive description: name: riverpod_analyzer_utils - sha256: "03a17170088c63aab6c54c44456f5ab78876a1ddb6032ffde1662ddab4959611" + sha256: a0f68adb078b790faa3c655110a017f9a7b7b079a57bbd40f540e80dce5fcd29 url: "https://pub.dev" source: hosted - version: "0.5.10" + version: "1.0.0-dev.7" riverpod_annotation: dependency: "direct main" description: name: riverpod_annotation - sha256: e14b0bf45b71326654e2705d462f21b958f987087be850afd60578fcd502d1b8 + sha256: "7230014155777fc31ba3351bc2cb5a3b5717b11bfafe52b1553cb47d385f8897" url: "https://pub.dev" source: hosted - version: "2.6.1" + version: "3.0.3" riverpod_generator: dependency: "direct dev" description: name: riverpod_generator - sha256: "44a0992d54473eb199ede00e2260bd3c262a86560e3c6f6374503d86d0580e36" + sha256: "49894543a42cf7a9954fc4e7366b6d3cb2e6ec0fa07775f660afcdd92d097702" url: "https://pub.dev" source: hosted - version: "2.6.5" + version: "3.0.3" shared_preferences: dependency: "direct main" description: @@ -957,6 +981,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.2" + shelf_packages_handler: + dependency: transitive + description: + name: shelf_packages_handler + sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + shelf_static: + dependency: transitive + description: + name: shelf_static + sha256: c87c3875f91262785dade62d135760c2c69cb217ac759485334c5857ad89f6e3 + url: "https://pub.dev" + source: hosted + version: "1.1.3" shelf_web_socket: dependency: transitive description: @@ -974,18 +1014,34 @@ packages: dependency: transitive description: name: source_gen - sha256: "35c8150ece9e8c8d263337a265153c3329667640850b9304861faea59fc98f6b" + sha256: "9098ab86015c4f1d8af6486b547b11100e73b193e1899015033cb3e14ad20243" url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "4.0.2" source_helper: dependency: transitive description: name: source_helper - sha256: a447acb083d3a5ef17f983dd36201aeea33fedadb3228fa831f2f0c92f0f3aca + sha256: "6a3c6cc82073a8797f8c4dc4572146114a39652851c157db37e964d9c7038723" url: "https://pub.dev" source: hosted - version: "1.3.7" + version: "1.3.8" + source_map_stack_trace: + dependency: transitive + description: + name: source_map_stack_trace + sha256: c0713a43e323c3302c2abe2a1cc89aa057a387101ebd280371d6a6c9fa68516b + url: "https://pub.dev" + source: hosted + version: "2.1.2" + source_maps: + dependency: transitive + description: + name: source_maps + sha256: "190222579a448b03896e0ca6eca5998fa810fda630c1d65e2f78b3f638f54812" + url: "https://pub.dev" + source: hosted + version: "0.10.13" source_span: dependency: transitive description: @@ -994,14 +1050,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.1" - sprintf: - dependency: transitive - description: - name: sprintf - sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" - url: "https://pub.dev" - source: hosted - version: "7.0.0" stack_trace: dependency: transitive description: @@ -1050,6 +1098,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.2" + test: + dependency: transitive + description: + name: test + sha256: "75906bf273541b676716d1ca7627a17e4c4070a3a16272b7a3dc7da3b9f3f6b7" + url: "https://pub.dev" + source: hosted + version: "1.26.3" test_api: dependency: transitive description: @@ -1058,14 +1114,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.7.7" - timing: + test_core: dependency: transitive description: - name: timing - sha256: "62ee18aca144e4a9f29d212f5a4c6a053be252b895ab14b5821996cff4ed90fe" + name: test_core + sha256: "0cc24b5ff94b38d2ae73e1eb43cc302b77964fbf67abad1e296025b78deb53d0" url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "0.6.12" typed_data: dependency: transitive description: @@ -1142,10 +1198,10 @@ packages: dependency: transitive description: name: uuid - sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff + sha256: a11b666489b1954e01d992f3d601b1804a33937b5a8fe677bd26b8a9f96f96e8 url: "https://pub.dev" source: hosted - version: "4.5.1" + version: "4.5.2" vector_math: dependency: transitive description: @@ -1194,6 +1250,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" + webkit_inspection_protocol: + dependency: transitive + description: + name: webkit_inspection_protocol + sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572" + url: "https://pub.dev" + source: hosted + version: "1.2.1" win32: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 7425672..a7be13f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -13,17 +13,17 @@ dependencies: cupertino_icons: ^1.0.8 - flutter_riverpod: ^2.5.0 - riverpod_annotation: ^2.3.5 + flutter_riverpod: ^3.0.3 + riverpod_annotation: ^3.0.3 - animate_do: ^3.1.2 + animate_do: ^4.2.0 lottie: ^3.0.0 iconsax: ^0.0.8 flutter_animate: ^4.3.0 getwidget: ^7.0.0 - flutter_appauth: ^7.0.0 - flutter_secure_storage: ^9.0.0 + flutter_appauth: ^11.0.0 + flutter_secure_storage: ^9.2.4 jwt_decoder: ^2.0.1 http: ^1.2.2 @@ -35,9 +35,9 @@ dependencies: image_picker: ^1.0.7 url_launcher: ^6.3.1 - permission_handler: ^11.3.0 + permission_handler: ^12.0.1 - go_router: ^14.0.0 + go_router: ^17.0.0 shared_preferences: ^2.5.3 http_interceptor: ^2.0.0 google_navigation_flutter: ^0.6.5 @@ -46,11 +46,11 @@ dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^5.0.0 + flutter_lints: ^6.0.0 build_runner: ^2.4.14 json_serializable: ^6.9.2 - riverpod_generator: ^2.4.0 + riverpod_generator: ^3.0.3 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec