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>
Implements the foundational gRPC client class with:
- Lazy ClientChannel initialization with proper credentials
- DeliveryServiceClient lazy initialization
- Authentication via Bearer token in gRPC metadata
- CallOptions builder with token injection
- gRPC error to ApiError mapping (status codes -> HTTP equivalents)
- Token refresh on UNAUTHENTICATED errors (single retry)
- Proper channel shutdown/terminate methods
The core _executeWithAuth and _executeCommandWithAuth methods provide
the foundation for query and command methods in subsequent subtasks.
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>
Removed SystemChrome.setPreferredOrientations call that was restricting
the app to landscape-only mode. The app now supports all device orientations
by using Flutter's default behavior.
Also fixed a minor lint warning by replacing (_, __) with named parameters.
Co-Authored-By: Claude <noreply@anthropic.com>