- Overhaul theme system with Svrnty design and WCAG AAA compliance
- Remove android, macos, and web platform files (iOS-only focus)
- Update components with improved dark mode map and UI refinements
- Enhance settings page with additional configuration options
- Add theme system documentation in lib/theme/README.md
- Update CLAUDE.md with comprehensive theme guidelines
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Regenerate proto stubs from correct cqrs_services.proto file
- Update GrpcCqrsApiClient to use DynamicQueryService and CommandService
- Fix type conversions for deliveries, routes, and commands
- Convert proto Timestamp to ISO8601 strings for model compatibility
- Convert string amounts to doubles for delivery orders
- Use Int64 for delivery IDs in gRPC commands
Work in progress: Timestamp conversion extension needs finalization.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add MobileDeliveriesListOpenNotifier provider for overlay state
- Create MobileMapWithOverlay component with slide-up animation
- Update routes_page.dart for responsive mobile/tablet/desktop layouts
- Mobile: full-screen map with FAB toggle for deliveries list
- Tablet/Desktop: maintain existing split-view layout
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Adds ApiModeConfig class with support for selecting API transport mode:
- ApiMode enum (http, grpc)
- Static configurations: development (HTTP), developmentGrpc, production, productionGrpc
- fallbackToHttpOnError option for graceful degradation
Creates unified deliveryRoutesProvider and deliveriesProvider that:
- Respect apiModeConfigProvider for transport selection
- Automatically delegate to gRPC or HTTP providers
- Fall back to HTTP on gRPC failures when configured
To enable gRPC, override apiModeConfigProvider with ApiModeConfig.developmentGrpc
in the ProviderScope.
Co-Authored-By: Claude <noreply@anthropic.com>
Add grpcDeliveriesProvider as a gRPC-based alternative to deliveriesProvider.
The new provider uses GrpcCqrsApiClient.getDeliveries() for improved
performance and type safety. Follows the existing pattern with:
- FutureProvider.family pattern for route-specific queries
- Authentication check before API calls
- Result.when() for proper error handling
- Warehouse delivery appended at the end
Co-Authored-By: Claude <noreply@anthropic.com>
Add grpcDeliveryRoutesProvider to providers.dart that uses GrpcCqrsApiClient
for fetching delivery routes. Follows the same pattern as the HTTP-based
deliveryRoutesProvider: checks authentication, uses grpcClientProvider,
and handles Result<T> responses with proper error logging.
Co-Authored-By: Claude <noreply@anthropic.com>
Add grpcClientProvider to providers.dart for gRPC-based API access:
- Import GrpcCqrsApiClient and GrpcConfig from api layer
- Create grpcClientProvider using Provider.autoDispose for proper
channel cleanup when no longer watched
- Inject authService for token management
- Register onDispose callback to shutdown gRPC channel resources
This follows the same pattern as the existing apiClientProvider while
adding proper resource management for gRPC connections.
Co-Authored-By: Claude <noreply@anthropic.com>
Fixed all 39 analyzer issues:
- Removed unused import (animation_system.dart in collapsible_routes_sidebar.dart)
- Removed unused element (_buildActionButton in dark_mode_map.dart)
- Fixed unnecessary non-null assertions on AppLocalizations.of(context)
- Removed unnecessary type checks in providers.dart
- Used super parameters for key in navigation_tc_dialog.dart and status_colors.dart
- Replaced print statements with debugPrint in providers.dart and logging_interceptor.dart
Co-Authored-By: Claude <noreply@anthropic.com>
Add comprehensive theme management system with iOS system integration:
- System theme detection: App follows iOS dark/light mode preferences via ThemeMode.system
- Theme provider: Centralized theme state management with Riverpod (defaults to dark mode)
- Settings toggle: Segmented button UI for Light/Dark/Auto theme selection
- iOS system UI: Status bar and navigation bar adapt to current theme brightness
Dark mode map styling (Android-ready):
- DarkModeMapComponent: Reactive theme change detection with didChangeDependencies
- Map style application: Custom dark JSON style for navigation maps
- Theme-aware styling: Automatically applies/resets map style on theme changes
- Note: Map styling currently Android-only due to iOS SDK limitations
Updates:
- main.dart: System UI overlay styling for iOS, theme provider integration
- settings_page.dart: SegmentedButton theme toggle with icons
- providers.dart: themeModeProvider for app-wide theme state
- dark_mode_map.dart: Theme reactivity and style application logic
- navigation_page.dart: Theme detection infrastructure (prepared for future use)
Design philosophy:
- Follow system preferences by default for native iOS experience
- Manual override available for user preference
- Clean separation between Flutter UI theming and native map styling
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Adds new components (CollapsibleRoutesSidebar, GlassmorphicRouteCard) and
internationalization support. Updates deliveries and routes pages with improved
navigation and visual presentation using Material Design 3 principles.
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
Implements complete refactor of Ionic Angular logistics app to Flutter/Dart with:
- Svrnty dark mode console theme (Material Design 3)
- Responsive layouts (mobile, tablet, desktop) following FRONTEND standards
- CQRS API integration with Result<T> error handling
- OAuth2/OIDC authentication support (mocked for initial testing)
- Delivery route and delivery management features
- Multi-language support (EN/FR) with i18n
- Native integrations (camera, phone calls, maps)
- Strict typing throughout codebase
- Mock data for UI testing without backend
Follows all FRONTEND style guides, design patterns, and conventions.
App is running in dark mode and fully responsive across all device sizes.
Co-Authored-By: Claude <noreply@anthropic.com>