feat: Introduce PDFService for optimized PDF generation and caching in container and equipment management

This commit is contained in:
ElPoyo
2025-10-30 18:45:50 +01:00
parent 822d4443f9
commit 6abb8f1d14
8 changed files with 429 additions and 513 deletions

View File

@@ -25,6 +25,7 @@ class _EquipmentManagementPageState extends State<EquipmentManagementPage>
with SelectionModeMixin<EquipmentManagementPage> {
final TextEditingController _searchController = TextEditingController();
EquipmentCategory? _selectedCategory;
List<EquipmentModel>? _cachedEquipment;
@override
void dispose() {
@@ -420,7 +421,13 @@ class _EquipmentManagementPageState extends State<EquipmentManagementPage>
return StreamBuilder<List<EquipmentModel>>(
stream: provider.equipmentStream,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
// Mettre en cache les données quand elles arrivent
if (snapshot.hasData) {
_cachedEquipment = snapshot.data;
}
// Afficher le loader seulement si on n'a pas encore de cache
if (snapshot.connectionState == ConnectionState.waiting && _cachedEquipment == null) {
return const Center(child: CircularProgressIndicator());
}
@@ -430,7 +437,10 @@ class _EquipmentManagementPageState extends State<EquipmentManagementPage>
);
}
if (!snapshot.hasData || snapshot.data!.isEmpty) {
// Utiliser le cache si disponible, sinon les nouvelles données
final equipment = _cachedEquipment ?? snapshot.data ?? [];
if (equipment.isEmpty) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
@@ -452,15 +462,15 @@ class _EquipmentManagementPageState extends State<EquipmentManagementPage>
);
}
// Tri par nom
final equipment = snapshot.data!;
equipment.sort((a, b) => a.name.compareTo(b.name));
// Créer une copie pour le tri
final sortedEquipment = List<EquipmentModel>.from(equipment);
sortedEquipment.sort((a, b) => a.name.compareTo(b.name));
return ListView.builder(
padding: const EdgeInsets.all(16),
itemCount: equipment.length,
itemCount: sortedEquipment.length,
itemBuilder: (context, index) {
return _buildEquipmentCard(equipment[index]);
return _buildEquipmentCard(sortedEquipment[index]);
},
);
},