perf: suppression du téléchargement massif d'événements côté client (appel de la CF checkContainerAvailability et lecture synchrone des quantités)

This commit is contained in:
ElPoyo
2026-05-26 13:50:35 +02:00
parent 93c102012b
commit 845b6e91d2
4 changed files with 78 additions and 309 deletions
@@ -3,7 +3,6 @@ import 'package:flutter/material.dart';
import 'package:em2rp/models/equipment_model.dart';
import 'package:em2rp/models/container_model.dart';
import 'package:em2rp/models/event_model.dart';
import 'package:em2rp/services/event_availability_service.dart';
import 'package:em2rp/services/data_service.dart';
import 'package:em2rp/services/api_service.dart';
import 'package:em2rp/utils/colors.dart';
@@ -88,7 +87,6 @@ class EquipmentSelectionDialog extends StatefulWidget {
class _EquipmentSelectionDialogState extends State<EquipmentSelectionDialog> {
final TextEditingController _searchController = TextEditingController();
final ScrollController _scrollController = ScrollController(); // Pr├®serve la position de scroll
final EventAvailabilityService _availabilityService = EventAvailabilityService();
final DataService _dataService = DataService(apiService);
EquipmentCategory? _selectedCategory;
@@ -279,7 +277,7 @@ class _EquipmentSelectionDialogState extends State<EquipmentSelectionDialog> {
DebugLog.info('[EquipmentSelectionDialog] Loaded ${newEquipments.length} equipments, total: ${_paginatedEquipments.length}, hasMore: $_hasMoreEquipments');
// Charger les quantites pour les consommables/cbles de cette page
await _loadAvailableQuantities(newEquipments);
_loadAvailableQuantities(newEquipments);
// Vrifier si on doit charger d'autres lments (ex: tout a t filtr)
WidgetsBinding.instance.addPostFrameCallback((_) {
@@ -442,7 +440,7 @@ class _EquipmentSelectionDialogState extends State<EquipmentSelectionDialog> {
}
/// Charge les quantit├®s disponibles pour les consommables/c├óbles d'une liste d'├®quipements
Future<void> _loadAvailableQuantities(List<EquipmentModel> equipments) async {
void _loadAvailableQuantities(List<EquipmentModel> equipments) {
if (!mounted) return;
try {
@@ -453,12 +451,13 @@ class _EquipmentSelectionDialogState extends State<EquipmentSelectionDialog> {
for (var eq in consumables) {
// Ne recharger que si on n'a pas d├®j├á la quantit├®
if (!_availableQuantities.containsKey(eq.id)) {
final available = await _availabilityService.getAvailableQuantity(
equipment: eq,
startDate: widget.startDate,
endDate: widget.endDate,
excludeEventId: widget.excludeEventId,
);
int available = eq.totalQuantity ?? 0;
if (_equipmentQuantities.containsKey(eq.id)) {
final qtyInfo = _equipmentQuantities[eq.id];
if (qtyInfo != null && qtyInfo['availableQuantity'] != null) {
available = (qtyInfo['availableQuantity'] as num).toInt();
}
}
_availableQuantities[eq.id] = available;
}
}