feat: add current events section for equipment with dynamic status calculation

This commit is contained in:
ElPoyo
2026-01-06 12:13:09 +01:00
parent 25d395b41a
commit fb6a271f66
12 changed files with 773 additions and 124 deletions

View File

@@ -0,0 +1,51 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:em2rp/models/equipment_model.dart';
import 'package:em2rp/providers/equipment_provider.dart';
/// Widget qui affiche le badge de statut d'un équipement
/// Le statut est calculé de manière asynchrone basé sur les événements en cours
class EquipmentStatusBadge extends StatelessWidget {
final EquipmentModel equipment;
const EquipmentStatusBadge({
super.key,
required this.equipment,
});
@override
Widget build(BuildContext context) {
final provider = Provider.of<EquipmentProvider>(context, listen: false);
print('[EquipmentStatusBadge] Building badge for ${equipment.id}');
return FutureBuilder<EquipmentStatus>(
// On calcule le statut réel de manière asynchrone
future: provider.calculateRealStatus(equipment),
// En attendant, on affiche le statut stocké
initialData: equipment.status,
builder: (context, snapshot) {
// Utiliser le statut calculé s'il est disponible, sinon le statut stocké
final status = snapshot.data ?? equipment.status;
print('[EquipmentStatusBadge] ${equipment.id} - Status: ${status.label} (hasData: ${snapshot.hasData}, connectionState: ${snapshot.connectionState})');
return Container(
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
decoration: BoxDecoration(
color: status.color.withValues(alpha: 0.2),
borderRadius: BorderRadius.circular(12),
border: Border.all(color: status.color),
),
child: Text(
status.label,
style: TextStyle(
fontSize: 12,
fontWeight: FontWeight.bold,
color: status.color,
),
),
);
},
);
}
}