import 'package:flutter/material.dart'; /// Badge de statut d'événement avec design moderne et compact. /// /// Ce widget affiche le statut d'un événement (ouvert, fermé, annulé) /// avec une couleur et une icône appropriées. /// /// **Usage:** /// ```dart /// EventStatusBadge(status: 'ouvert') /// EventStatusBadge(status: 'fermé') /// ``` class EventStatusBadge extends StatelessWidget { const EventStatusBadge({ required this.status, super.key, }); /// Le statut de l'événement ('ouvert', 'fermé', 'annulé') final String status; /// Retourne les propriétés du statut. _StatusProperties get _properties { final lowerStatus = status.toLowerCase(); switch (lowerStatus) { case 'fermé': return _StatusProperties( color: Colors.red, icon: Icons.lock, label: 'Fermé', ); case 'annulé': return _StatusProperties( color: Colors.orange, icon: Icons.cancel, label: 'Annulé', ); case 'ouvert': default: return _StatusProperties( color: Colors.green, icon: Icons.lock_open, label: 'Ouvert', ); } } @override Widget build(BuildContext context) { final theme = Theme.of(context); final props = _properties; return Container( padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), decoration: BoxDecoration( color: props.color.withOpacity(0.15), borderRadius: BorderRadius.circular(12), border: Border.all( color: props.color.withOpacity(0.5), width: 1, ), ), child: Row( mainAxisSize: MainAxisSize.min, children: [ Icon( props.icon, color: props.color, size: 12, ), const SizedBox(width: 4), Text( props.label, style: theme.textTheme.bodySmall?.copyWith( color: props.color, fontSize: 11, fontWeight: FontWeight.w600, ), ), ], ), ); } } /// Propriétés d'un statut d'événement. class _StatusProperties { const _StatusProperties({ required this.color, required this.icon, required this.label, }); final Color color; final IconData icon; final String label; }