From 9bd4b299671905c3a8b7a38072d731227eccc806 Mon Sep 17 00:00:00 2001 From: Paul Date: Mon, 9 Mar 2026 11:17:03 +0100 Subject: [PATCH] refactor: Rename date parsing helper functions for consistency --- em2rp/lib/main.dart | 1 - em2rp/lib/models/alert_model.dart | 8 +- em2rp/lib/models/container_model.dart | 10 +-- em2rp/lib/models/equipment_model.dart | 10 +-- em2rp/lib/models/event_model.dart | 6 +- em2rp/lib/models/maintenance_model.dart | 10 +-- em2rp/lib/providers/container_provider.dart | 4 +- em2rp/lib/providers/equipment_provider.dart | 4 +- em2rp/lib/providers/event_provider.dart | 6 +- em2rp/lib/services/ics_export_service.dart | 4 +- em2rp/lib/services/pdf_service.dart | 1 - em2rp/lib/services/qr_code_service.dart | 1 - em2rp/lib/utils/performance_monitor.dart | 4 +- em2rp/lib/views/container_form_page.dart | 4 +- em2rp/lib/views/data_management_page.dart | 2 +- em2rp/lib/views/equipment_form_page.dart | 4 +- em2rp/lib/views/event_preparation_page.dart | 16 ++-- .../widgets/auth/forgot_password_dialog.dart | 1 - .../event_details_documents.dart | 2 +- .../user_filter_dropdown.dart | 2 +- .../event/equipment_conflict_dialog.dart | 2 +- .../event/equipment_selection_dialog.dart | 88 +++---------------- .../event/optimized_equipment_card.dart | 1 - .../event_assigned_equipment_section.dart | 11 ++- .../event_form/event_basic_info_section.dart | 1 - .../inputs/option_selector_widget.dart | 3 +- .../notification_preferences_widget.dart | 2 +- 27 files changed, 70 insertions(+), 138 deletions(-) diff --git a/em2rp/lib/main.dart b/em2rp/lib/main.dart index aed18a8..4eb1fbc 100644 --- a/em2rp/lib/main.dart +++ b/em2rp/lib/main.dart @@ -33,7 +33,6 @@ import 'services/update_service.dart'; import 'views/widgets/common/update_dialog.dart'; import 'config/api_config.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; -import 'views/widgets/common/update_dialog.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); diff --git a/em2rp/lib/models/alert_model.dart b/em2rp/lib/models/alert_model.dart index 36d299e..df060d6 100644 --- a/em2rp/lib/models/alert_model.dart +++ b/em2rp/lib/models/alert_model.dart @@ -151,7 +151,7 @@ class AlertModel { factory AlertModel.fromMap(Map map, String id) { // Fonction helper pour convertir Timestamp ou String ISO en DateTime - DateTime _parseDate(dynamic value) { + DateTime parseDate(dynamic value) { if (value == null) return DateTime.now(); if (value is Timestamp) return value.toDate(); if (value is String) return DateTime.tryParse(value) ?? DateTime.now(); @@ -174,13 +174,13 @@ class AlertModel { eventId: map['eventId'], equipmentId: map['equipmentId'], createdByUserId: map['createdByUserId'] ?? map['createdBy'], - createdAt: _parseDate(map['createdAt']), - dueDate: map['dueDate'] != null ? _parseDate(map['dueDate']) : null, + createdAt: parseDate(map['createdAt']), + dueDate: map['dueDate'] != null ? parseDate(map['dueDate']) : null, actionUrl: map['actionUrl'], isRead: map['isRead'] ?? false, isResolved: map['isResolved'] ?? false, resolution: map['resolution'], - resolvedAt: map['resolvedAt'] != null ? _parseDate(map['resolvedAt']) : null, + resolvedAt: map['resolvedAt'] != null ? parseDate(map['resolvedAt']) : null, resolvedByUserId: map['resolvedByUserId'], ); } diff --git a/em2rp/lib/models/container_model.dart b/em2rp/lib/models/container_model.dart index ce0f7fa..5de858e 100644 --- a/em2rp/lib/models/container_model.dart +++ b/em2rp/lib/models/container_model.dart @@ -243,7 +243,7 @@ class ContainerModel { /// Factory depuis Firestore factory ContainerModel.fromMap(Map map, String id) { // Fonction helper pour convertir Timestamp ou String ISO en DateTime - DateTime? _parseDate(dynamic value) { + DateTime? parseDate(dynamic value) { if (value == null) return null; if (value is Timestamp) return value.toDate(); if (value is String) return DateTime.tryParse(value); @@ -270,8 +270,8 @@ class ContainerModel { equipmentIds: equipmentIds, eventId: map['eventId'], notes: map['notes'], - createdAt: _parseDate(map['createdAt']) ?? DateTime.now(), - updatedAt: _parseDate(map['updatedAt']) ?? DateTime.now(), + createdAt: parseDate(map['createdAt']) ?? DateTime.now(), + updatedAt: parseDate(map['updatedAt']) ?? DateTime.now(), history: history, ); } @@ -351,7 +351,7 @@ class ContainerHistoryEntry { factory ContainerHistoryEntry.fromMap(Map map) { // Helper pour parser la date - DateTime _parseDate(dynamic value) { + DateTime parseDate(dynamic value) { if (value == null) return DateTime.now(); if (value is Timestamp) return value.toDate(); if (value is String) return DateTime.tryParse(value) ?? DateTime.now(); @@ -359,7 +359,7 @@ class ContainerHistoryEntry { } return ContainerHistoryEntry( - timestamp: _parseDate(map['timestamp']), + timestamp: parseDate(map['timestamp']), action: map['action'] ?? '', equipmentId: map['equipmentId'], previousValue: map['previousValue'], diff --git a/em2rp/lib/models/equipment_model.dart b/em2rp/lib/models/equipment_model.dart index bfc3fa3..f94853a 100644 --- a/em2rp/lib/models/equipment_model.dart +++ b/em2rp/lib/models/equipment_model.dart @@ -388,7 +388,7 @@ class EquipmentModel { factory EquipmentModel.fromMap(Map map, String id) { // Fonction helper pour convertir Timestamp ou String ISO en DateTime - DateTime? _parseDate(dynamic value) { + DateTime? parseDate(dynamic value) { if (value == null) return null; if (value is Timestamp) return value.toDate(); if (value is String) return DateTime.tryParse(value); @@ -416,13 +416,13 @@ class EquipmentModel { length: map['length']?.toDouble(), width: map['width']?.toDouble(), height: map['height']?.toDouble(), - purchaseDate: _parseDate(map['purchaseDate']), - nextMaintenanceDate: _parseDate(map['nextMaintenanceDate']), + purchaseDate: parseDate(map['purchaseDate']), + nextMaintenanceDate: parseDate(map['nextMaintenanceDate']), maintenanceIds: maintenanceIds, imageUrl: map['imageUrl'], notes: map['notes'], - createdAt: _parseDate(map['createdAt']) ?? DateTime.now(), - updatedAt: _parseDate(map['updatedAt']) ?? DateTime.now(), + createdAt: parseDate(map['createdAt']) ?? DateTime.now(), + updatedAt: parseDate(map['updatedAt']) ?? DateTime.now(), ); } diff --git a/em2rp/lib/models/event_model.dart b/em2rp/lib/models/event_model.dart index fcdc6e7..87f5171 100644 --- a/em2rp/lib/models/event_model.dart +++ b/em2rp/lib/models/event_model.dart @@ -347,7 +347,7 @@ class EventModel { factory EventModel.fromMap(Map map, String id) { try { // Fonction helper pour convertir Timestamp ou String ISO en DateTime - DateTime _parseDate(dynamic value, DateTime defaultValue) { + DateTime parseDate(dynamic value, DateTime defaultValue) { if (value == null) return defaultValue; if (value is Timestamp) return value.toDate(); if (value is String) return DateTime.tryParse(value) ?? defaultValue; @@ -370,8 +370,8 @@ class EventModel { } // Gestion sécurisée des timestamps avec support ISO string - final DateTime startDate = _parseDate(map['StartDateTime'], DateTime.now()); - final DateTime endDate = _parseDate(map['EndDateTime'], startDate.add(const Duration(hours: 1))); + final DateTime startDate = parseDate(map['StartDateTime'], DateTime.now()); + final DateTime endDate = parseDate(map['EndDateTime'], startDate.add(const Duration(hours: 1))); // Gestion sécurisée des documents final docsRaw = map['documents'] ?? []; diff --git a/em2rp/lib/models/maintenance_model.dart b/em2rp/lib/models/maintenance_model.dart index c02b30d..723b28b 100644 --- a/em2rp/lib/models/maintenance_model.dart +++ b/em2rp/lib/models/maintenance_model.dart @@ -61,7 +61,7 @@ class MaintenanceModel { factory MaintenanceModel.fromMap(Map map, String id) { // Fonction helper pour convertir Timestamp ou String ISO en DateTime - DateTime? _parseDate(dynamic value) { + DateTime? parseDate(dynamic value) { if (value == null) return null; if (value is Timestamp) return value.toDate(); if (value is String) return DateTime.tryParse(value); @@ -76,15 +76,15 @@ class MaintenanceModel { id: id, equipmentIds: equipmentIds, type: maintenanceTypeFromString(map['type']), - scheduledDate: _parseDate(map['scheduledDate']) ?? DateTime.now(), - completedDate: _parseDate(map['completedDate']), + scheduledDate: parseDate(map['scheduledDate']) ?? DateTime.now(), + completedDate: parseDate(map['completedDate']), name: map['name'] ?? '', description: map['description'] ?? '', performedBy: map['performedBy'], cost: map['cost']?.toDouble(), notes: map['notes'], - createdAt: _parseDate(map['createdAt']) ?? DateTime.now(), - updatedAt: _parseDate(map['updatedAt']) ?? DateTime.now(), + createdAt: parseDate(map['createdAt']) ?? DateTime.now(), + updatedAt: parseDate(map['updatedAt']) ?? DateTime.now(), ); } diff --git a/em2rp/lib/providers/container_provider.dart b/em2rp/lib/providers/container_provider.dart index cd0b403..b429283 100644 --- a/em2rp/lib/providers/container_provider.dart +++ b/em2rp/lib/providers/container_provider.dart @@ -15,13 +15,13 @@ class ContainerProvider with ChangeNotifier { Timer? _searchDebounceTimer; // Liste paginée pour la page de gestion - List _paginatedContainers = []; + final List _paginatedContainers = []; bool _hasMore = true; bool _isLoadingMore = false; String? _lastVisible; // Cache complet pour compatibilité - List _containers = []; + final List _containers = []; // Filtres et recherche ContainerType? _selectedType; diff --git a/em2rp/lib/providers/equipment_provider.dart b/em2rp/lib/providers/equipment_provider.dart index 7b945bf..686034c 100644 --- a/em2rp/lib/providers/equipment_provider.dart +++ b/em2rp/lib/providers/equipment_provider.dart @@ -12,13 +12,13 @@ class EquipmentProvider extends ChangeNotifier { Timer? _searchDebounceTimer; // Liste paginée pour la page de gestion - List _paginatedEquipment = []; + final List _paginatedEquipment = []; bool _hasMore = true; bool _isLoadingMore = false; String? _lastVisible; // Cache complet pour getEquipmentsByIds et compatibilité - List _equipment = []; + final List _equipment = []; List _models = []; List _brands = []; diff --git a/em2rp/lib/providers/event_provider.dart b/em2rp/lib/providers/event_provider.dart index d3a31e9..887323c 100644 --- a/em2rp/lib/providers/event_provider.dart +++ b/em2rp/lib/providers/event_provider.dart @@ -19,7 +19,7 @@ class EventProvider with ChangeNotifier { bool _lastCanViewAll = false; // Nouveau: Cache par mois pour le lazy loading - Map> _eventsByMonth = {}; // "2026-02" => [events] + final Map> _eventsByMonth = {}; // "2026-02" => [events] String? _currentMonth; // Mois actuellement affiché List get events => _events; @@ -88,7 +88,7 @@ class EventProvider with ChangeNotifier { _lastUserId = userId; _lastCanViewAll = canViewAllEvents; - print('Successfully loaded ${_events.length} events (${failedCount} failed)'); + print('Successfully loaded ${_events.length} events ($failedCount failed)'); _isLoading = false; notifyListeners(); @@ -176,7 +176,7 @@ class EventProvider with ChangeNotifier { _lastUserId = userId; _lastCanViewAll = canViewAllEvents; - print('[EventProvider] Successfully loaded ${monthEvents.length} events for $monthKey (${failedCount} failed)'); + print('[EventProvider] Successfully loaded ${monthEvents.length} events for $monthKey ($failedCount failed)'); if (!silent) { _isLoading = false; diff --git a/em2rp/lib/services/ics_export_service.dart b/em2rp/lib/services/ics_export_service.dart index 30269d2..626d0c7 100644 --- a/em2rp/lib/services/ics_export_service.dart +++ b/em2rp/lib/services/ics_export_service.dart @@ -16,7 +16,7 @@ class IcsExportService { Map? optionNames, }) async { final now = DateTime.now().toUtc(); - final timestamp = DateFormat('yyyyMMddTHHmmss').format(now) + 'Z'; + final timestamp = '${DateFormat('yyyyMMddTHHmmss').format(now)}Z'; // Récupérer les informations supplémentaires final resolvedEventTypeName = eventTypeName ?? await _getEventTypeName(event.eventTypeId); @@ -238,7 +238,7 @@ END:VCALENDAR'''; /// Formate une date au format ICS (yyyyMMddTHHmmssZ) static String _formatDateForIcs(DateTime dateTime) { final utcDate = dateTime.toUtc(); - return DateFormat('yyyyMMddTHHmmss').format(utcDate) + 'Z'; + return '${DateFormat('yyyyMMddTHHmmss').format(utcDate)}Z'; } /// Échappe les caractères spéciaux pour le format ICS diff --git a/em2rp/lib/services/pdf_service.dart b/em2rp/lib/services/pdf_service.dart index 6a3ec3e..096380e 100644 --- a/em2rp/lib/services/pdf_service.dart +++ b/em2rp/lib/services/pdf_service.dart @@ -1,4 +1,3 @@ -import 'dart:typed_data'; import 'package:flutter/services.dart'; import 'package:pdf/pdf.dart'; import 'package:pdf/widgets.dart' as pw; diff --git a/em2rp/lib/services/qr_code_service.dart b/em2rp/lib/services/qr_code_service.dart index 9519a2d..c2ff2fb 100644 --- a/em2rp/lib/services/qr_code_service.dart +++ b/em2rp/lib/services/qr_code_service.dart @@ -1,4 +1,3 @@ -import 'dart:typed_data'; import 'dart:ui' as ui; import 'package:flutter/services.dart'; import 'package:qr_flutter/qr_flutter.dart'; diff --git a/em2rp/lib/utils/performance_monitor.dart b/em2rp/lib/utils/performance_monitor.dart index 2cfaab2..4ce8101 100644 --- a/em2rp/lib/utils/performance_monitor.dart +++ b/em2rp/lib/utils/performance_monitor.dart @@ -59,7 +59,7 @@ class PerformanceMonitor { static void printSummary() { if (!_enabled || _results.isEmpty) return; - print('\n' + '=' * 60); + print('\n${'=' * 60}'); print('PERFORMANCE SUMMARY'); print('=' * 60); @@ -77,7 +77,7 @@ class PerformanceMonitor { Duration.zero, (sum, duration) => sum + duration, ); - print('${'=' * 60}'); + print('=' * 60); print('TOTAL: ${total.inMilliseconds}ms'); print('=' * 60 + '\n'); } diff --git a/em2rp/lib/views/container_form_page.dart b/em2rp/lib/views/container_form_page.dart index 9ac9659..443b1f1 100644 --- a/em2rp/lib/views/container_form_page.dart +++ b/em2rp/lib/views/container_form_page.dart @@ -169,7 +169,7 @@ class _ContainerFormPageState extends State { // Type DropdownButtonFormField( - value: _selectedType, + initialValue: _selectedType, decoration: const InputDecoration( labelText: 'Type de container *', border: OutlineInputBorder(), @@ -194,7 +194,7 @@ class _ContainerFormPageState extends State { // Statut DropdownButtonFormField( - value: _selectedStatus, + initialValue: _selectedStatus, decoration: const InputDecoration( labelText: 'Statut *', border: OutlineInputBorder(), diff --git a/em2rp/lib/views/data_management_page.dart b/em2rp/lib/views/data_management_page.dart index 5361968..98e7228 100644 --- a/em2rp/lib/views/data_management_page.dart +++ b/em2rp/lib/views/data_management_page.dart @@ -78,7 +78,7 @@ class _DataManagementPageState extends State { child: Column( children: [ // Menu horizontal en mobile - Container( + SizedBox( height: 60, child: ListView.builder( scrollDirection: Axis.horizontal, diff --git a/em2rp/lib/views/equipment_form_page.dart b/em2rp/lib/views/equipment_form_page.dart index facb91b..c4c1cf2 100644 --- a/em2rp/lib/views/equipment_form_page.dart +++ b/em2rp/lib/views/equipment_form_page.dart @@ -271,7 +271,7 @@ class _EquipmentFormPageState extends State { children: [ Expanded( child: DropdownButtonFormField( - value: _selectedCategory, + initialValue: _selectedCategory, decoration: const InputDecoration( labelText: 'Catégorie *', border: OutlineInputBorder(), @@ -299,7 +299,7 @@ class _EquipmentFormPageState extends State { const SizedBox(width: 16), Expanded( child: DropdownButtonFormField( - value: _selectedStatus, + initialValue: _selectedStatus, decoration: const InputDecoration( labelText: 'Statut *', border: OutlineInputBorder(), diff --git a/em2rp/lib/views/event_preparation_page.dart b/em2rp/lib/views/event_preparation_page.dart index fa30da4..96e5721 100644 --- a/em2rp/lib/views/event_preparation_page.dart +++ b/em2rp/lib/views/event_preparation_page.dart @@ -49,18 +49,18 @@ class _EventPreparationPageState extends State with Single late final DataService _dataService; late final QRCodeProcessingService _qrCodeService; - Map _equipmentCache = {}; - Map _containerCache = {}; - Map _returnedQuantities = {}; + final Map _equipmentCache = {}; + final Map _containerCache = {}; + final Map _returnedQuantities = {}; // État local des validations (non sauvegardé jusqu'à la validation finale) - Map _localValidationState = {}; + final Map _localValidationState = {}; // Gestion des quantités par étape - Map _quantitiesAtPreparation = {}; - Map _quantitiesAtLoading = {}; - Map _quantitiesAtUnloading = {}; - Map _quantitiesAtReturn = {}; + final Map _quantitiesAtPreparation = {}; + final Map _quantitiesAtLoading = {}; + final Map _quantitiesAtUnloading = {}; + final Map _quantitiesAtReturn = {}; bool _isLoading = true; bool _isValidating = false; diff --git a/em2rp/lib/views/widgets/auth/forgot_password_dialog.dart b/em2rp/lib/views/widgets/auth/forgot_password_dialog.dart index 6818994..0bfbc20 100644 --- a/em2rp/lib/views/widgets/auth/forgot_password_dialog.dart +++ b/em2rp/lib/views/widgets/auth/forgot_password_dialog.dart @@ -1,4 +1,3 @@ -import 'package:em2rp/utils/debug_log.dart'; import 'package:em2rp/utils/colors.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/material.dart'; diff --git a/em2rp/lib/views/widgets/calendar_widgets/event_details_components/event_details_documents.dart b/em2rp/lib/views/widgets/calendar_widgets/event_details_components/event_details_documents.dart index 55baf02..5b3accb 100644 --- a/em2rp/lib/views/widgets/calendar_widgets/event_details_components/event_details_documents.dart +++ b/em2rp/lib/views/widgets/calendar_widgets/event_details_components/event_details_documents.dart @@ -133,7 +133,7 @@ class EventDetailsDocuments extends StatelessWidget { context: context, builder: (BuildContext context) { return Dialog( - child: Container( + child: SizedBox( width: MediaQuery.of(context).size.width * 0.9, height: MediaQuery.of(context).size.height * 0.8, child: Column( diff --git a/em2rp/lib/views/widgets/calendar_widgets/user_filter_dropdown.dart b/em2rp/lib/views/widgets/calendar_widgets/user_filter_dropdown.dart index 9682327..5d38f9d 100644 --- a/em2rp/lib/views/widgets/calendar_widgets/user_filter_dropdown.dart +++ b/em2rp/lib/views/widgets/calendar_widgets/user_filter_dropdown.dart @@ -132,7 +132,7 @@ class _UserFilterDropdownState extends State { ], ), ); - }).toList(), + }), ], ), ), diff --git a/em2rp/lib/views/widgets/event/equipment_conflict_dialog.dart b/em2rp/lib/views/widgets/event/equipment_conflict_dialog.dart index 63db541..b007b2e 100644 --- a/em2rp/lib/views/widgets/event/equipment_conflict_dialog.dart +++ b/em2rp/lib/views/widgets/event/equipment_conflict_dialog.dart @@ -241,7 +241,7 @@ class _EquipmentConflictDialogState extends State { ], ), ); - }).toList(), + }), // Boutons d'action par équipement if (!isRemoved) diff --git a/em2rp/lib/views/widgets/event/equipment_selection_dialog.dart b/em2rp/lib/views/widgets/event/equipment_selection_dialog.dart index e6138e1..b6dcf63 100644 --- a/em2rp/lib/views/widgets/event/equipment_selection_dialog.dart +++ b/em2rp/lib/views/widgets/event/equipment_selection_dialog.dart @@ -35,7 +35,7 @@ class ContainerConflictInfo { if (status == ContainerConflictStatus.complete) { return 'Tous les équipements sont déjà utilisés'; } - return '${conflictingEquipmentIds.length}/${totalChildren} équipement(s) déjà utilisé(s)'; + return '${conflictingEquipmentIds.length}/$totalChildren équipement(s) déjà utilisé(s)'; } } @@ -94,11 +94,11 @@ class _EquipmentSelectionDialogState extends State { Map _selectedItems = {}; final ValueNotifier _selectionChangeNotifier = ValueNotifier(0); // Pour notifier les changements de sélection sans setState - Map _availableQuantities = {}; // Pour consommables - Map> _recommendedContainers = {}; // Recommandations - Map> _equipmentConflicts = {}; // Conflits de disponibilité (détaillés) - Map _containerConflicts = {}; // Conflits des conteneurs - Set _expandedContainers = {}; // Conteneurs dépliés dans la liste + final Map _availableQuantities = {}; // Pour consommables + final Map> _recommendedContainers = {}; // Recommandations + final Map> _equipmentConflicts = {}; // Conflits de disponibilité (détaillés) + final Map _containerConflicts = {}; // Conflits des conteneurs + final Set _expandedContainers = {}; // Conteneurs dépliés dans la liste // NOUVEAU : IDs en conflit récupérés en batch Set _conflictingEquipmentIds = {}; @@ -119,12 +119,12 @@ class _EquipmentSelectionDialogState extends State { bool _hasMoreContainers = true; String? _lastEquipmentId; String? _lastContainerId; - List _paginatedEquipments = []; - List _paginatedContainers = []; + final List _paginatedEquipments = []; + final List _paginatedContainers = []; // Cache pour éviter les rebuilds inutiles - List _cachedContainers = []; - List _cachedEquipment = []; + final List _cachedContainers = []; + final List _cachedEquipment = []; @override void initState() { @@ -1047,7 +1047,7 @@ class _EquipmentSelectionDialogState extends State { shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(16), ), - child: Container( + child: SizedBox( width: dialogWidth.clamp(600.0, 1200.0), height: dialogHeight.clamp(500.0, 900.0), child: Column( @@ -1458,66 +1458,6 @@ class _EquipmentSelectionDialogState extends State { ); } - /// Header de section repliable - Widget _buildCollapsibleSectionHeader( - String title, - IconData icon, - int count, - bool isExpanded, - Function(bool) onToggle, - ) { - return InkWell( - onTap: () => onToggle(!isExpanded), - child: Container( - padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 12), - decoration: BoxDecoration( - color: AppColors.rouge.withValues(alpha: 0.1), - borderRadius: BorderRadius.circular(8), - border: Border.all( - color: AppColors.rouge.withValues(alpha: 0.3), - width: 1, - ), - ), - child: Row( - children: [ - Icon( - isExpanded ? Icons.keyboard_arrow_down : Icons.keyboard_arrow_right, - color: AppColors.rouge, - size: 24, - ), - const SizedBox(width: 8), - Icon(icon, color: AppColors.rouge, size: 20), - const SizedBox(width: 8), - Text( - title, - style: const TextStyle( - fontSize: 16, - fontWeight: FontWeight.bold, - color: AppColors.rouge, - ), - ), - const Spacer(), - Container( - padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 4), - decoration: BoxDecoration( - color: AppColors.rouge, - borderRadius: BorderRadius.circular(12), - ), - child: Text( - '$count', - style: const TextStyle( - color: Colors.white, - fontSize: 13, - fontWeight: FontWeight.bold, - ), - ), - ), - ], - ), - ), - ); - } - Widget _buildEquipmentCard(EquipmentModel equipment, {Key? key}) { final isSelected = _selectedItems.containsKey(equipment.id); final isConsumable = equipment.category == EquipmentCategory.consumable || @@ -1809,7 +1749,7 @@ class _EquipmentSelectionDialogState extends State { }) { final displayQuantity = isSelected ? selectedItem.quantity : 0; - return Container( + return SizedBox( width: 120, child: Row( children: [ @@ -2369,7 +2309,7 @@ class _EquipmentSelectionDialogState extends State { } // Cache local pour les équipements des conteneurs - Map> _containerEquipmentCache = {}; + final Map> _containerEquipmentCache = {}; Widget _buildSelectedContainerTile(String id, SelectedItem item) { final isExpanded = _expandedContainers.contains(id); @@ -2425,7 +2365,7 @@ class _EquipmentSelectionDialogState extends State { return _buildSelectedChildEquipmentTile(equipmentId, childItem); } return const SizedBox.shrink(); - }).toList(), + }), ], ); } diff --git a/em2rp/lib/views/widgets/event/optimized_equipment_card.dart b/em2rp/lib/views/widgets/event/optimized_equipment_card.dart index 826b018..be09b99 100644 --- a/em2rp/lib/views/widgets/event/optimized_equipment_card.dart +++ b/em2rp/lib/views/widgets/event/optimized_equipment_card.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; import 'package:em2rp/models/equipment_model.dart'; -import 'package:em2rp/views/widgets/event/equipment_selection_dialog.dart'; /// Widget optimisé pour une card d'équipement qui ne rebuild que si nécessaire class OptimizedEquipmentCard extends StatefulWidget { diff --git a/em2rp/lib/views/widgets/event_form/event_assigned_equipment_section.dart b/em2rp/lib/views/widgets/event_form/event_assigned_equipment_section.dart index 0e39857..8554bf7 100644 --- a/em2rp/lib/views/widgets/event_form/event_assigned_equipment_section.dart +++ b/em2rp/lib/views/widgets/event_form/event_assigned_equipment_section.dart @@ -10,7 +10,6 @@ import 'package:em2rp/services/data_service.dart'; import 'package:em2rp/services/api_service.dart'; import 'package:em2rp/utils/colors.dart'; import 'package:em2rp/views/widgets/event/equipment_selection_dialog.dart'; -import 'package:em2rp/views/widgets/event/equipment_conflict_dialog.dart'; import 'package:em2rp/services/event_availability_service.dart'; /// Section pour afficher et gérer le matériel assigné à un événement @@ -40,8 +39,8 @@ class _EventAssignedEquipmentSectionState extends State widget.startDate != null && widget.endDate != null; final EventAvailabilityService _availabilityService = EventAvailabilityService(); final DataService _dataService = DataService(FirebaseFunctionsApiService()); - Map _equipmentCache = {}; - Map _containerCache = {}; + final Map _equipmentCache = {}; + final Map _containerCache = {}; bool _isLoading = true; @override @@ -491,7 +490,7 @@ class _EventAssignedEquipmentSectionState extends State