Implement premium UI/UX refinements for Apple-like polish

Add three major UI components with animations and dark mode support:

- PremiumRouteCard: Enhanced route cards with left accent bar, delivery count badge, animated hover effects (1.02x scale), and dynamic shadow elevation
- DarkModeMapComponent: Google Maps integration with dark theme styling, custom info panels, navigation buttons, and delivery status indicators
- DeliveryListItem: Animated list items with staggered entrance animations, status badges with icons, contact indicators, and hover states

Updates:
- RoutesPage: Now uses PremiumRouteCard with improved visual hierarchy
- DeliveriesPage: Integrated DarkModeMapComponent and DeliveryListItem with proper theme awareness
- Animation system: Leverages existing AppAnimations constants for 200ms fast interactions and easeOut curves

Design philosophy:
- Element separation through left accent bars (status-coded)
- Elevation and shadow for depth (0.1-0.3 opacity)
- Staggered animations for list items (50ms delays)
- Dark mode optimized for evening use (reduced brightness)
- Responsive hover states with tactile feedback

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Jean-Philippe Brule
2025-11-15 14:41:32 -05:00
parent ccb817e3c6
commit 3f31a509e0
23 changed files with 3519 additions and 791 deletions
-137
View File
@@ -1,137 +0,0 @@
// ignore: unused_import
import 'package:intl/intl.dart' as intl;
import 'app_localizations.dart';
// ignore_for_file: type=lint
/// The translations for French (`fr`).
class AppLocalizationsFr extends AppLocalizations {
AppLocalizationsFr([String locale = 'fr']) : super(locale);
@override
String get appTitle => 'Plan B Logistique';
@override
String get appDescription => 'Systme de Gestion des Livraisons';
@override
String get loginWithKeycloak => 'Connexion avec Keycloak';
@override
String get deliveryRoutes => 'Itinraires de Livraison';
@override
String get routes => 'Itinraires';
@override
String get deliveries => 'Livraisons';
@override
String get settings => 'Paramtres';
@override
String get profile => 'Profil';
@override
String get logout => 'Dconnexion';
@override
String get completed => 'Livr';
@override
String get pending => 'En attente';
@override
String get todo => 'livrer';
@override
String get delivered => 'Livr';
@override
String get newCustomer => 'Nouveau Client';
@override
String items(int count) {
return '$count articles';
}
@override
String moneyCurrency(double amount) {
return '$amount MAD';
}
@override
String get call => 'Appeler';
@override
String get map => 'Carte';
@override
String get more => 'Plus';
@override
String get markAsCompleted => 'Marquer comme livr';
@override
String get markAsUncompleted => 'Marquer comme livrer';
@override
String get uploadPhoto => 'Tlcharger une photo';
@override
String get viewDetails => 'Voir les dtails';
@override
String get deliverySuccessful => 'Livraison marque comme complte';
@override
String get deliveryFailed => 'chec du marquage de la livraison';
@override
String get noDeliveries => 'Aucune livraison';
@override
String get noRoutes => 'Aucun itinraire disponible';
@override
String error(String message) {
return 'Erreur: $message';
}
@override
String get retry => 'Ressayer';
@override
String get authenticationRequired => 'Authentification requise';
@override
String get phoneCall => 'Appeler le client';
@override
String get navigateToAddress => 'Afficher sur la carte';
@override
String get language => 'Langue';
@override
String get english => 'English';
@override
String get french => 'Franais';
@override
String get appVersion => 'Version de l\'application';
@override
String get about => ' propos';
@override
String fullName(String firstName, String lastName) {
return '$firstName $lastName';
}
@override
String completedDeliveries(int completed, int total) {
return '$completed/$total livrs';
}
}