52 lines
1.8 KiB
Dart
52 lines
1.8 KiB
Dart
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,
|
|
),
|
|
),
|
|
);
|
|
},
|
|
);
|
|
}
|
|
}
|
|
|