import 'package:flutter/material.dart'; import '../theme/app_colors.dart'; /// Badge de statut discret. class StatusBadge extends StatelessWidget { const StatusBadge({super.key, required this.label, required this.color}); final String label; final Color color; factory StatusBadge.fromStatus(String status) { final (label, color) = switch (status) { 'available' || 'confirmed' || 'completed' => ('Disponible', AppColors.machineAvailable), 'running' || 'active' || 'pending_start' => ('En cours', AppColors.machineRunning), 'reserved' || 'pending' => ('Réservé', AppColors.machineReserved), 'cancelled' => ('Annulé', AppColors.textSecondary), _ => (status, AppColors.textSecondary), }; return StatusBadge(label: label, color: color); } @override Widget build(BuildContext context) { return Container( padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 3), decoration: BoxDecoration( color: color.withValues(alpha: 0.12), borderRadius: BorderRadius.circular(6), ), child: Text( label, style: TextStyle(color: color, fontSize: 11, fontWeight: FontWeight.w600), ), ); } } /// Bandeau d'en-tête discret pour les écrans principaux. class ScreenHeader extends StatelessWidget { const ScreenHeader({ super.key, required this.title, this.subtitle, }); final String title; final String? subtitle; @override Widget build(BuildContext context) { return Container( width: double.infinity, margin: const EdgeInsets.fromLTRB(16, 8, 16, 12), padding: const EdgeInsets.all(16), decoration: BoxDecoration( gradient: AppColors.gradientAccent, borderRadius: BorderRadius.circular(14), boxShadow: [ BoxShadow( color: AppColors.primary.withValues(alpha: 0.15), blurRadius: 8, offset: const Offset(0, 3), ), ], ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( title, style: const TextStyle( color: Colors.white, fontSize: 18, fontWeight: FontWeight.w600, ), ), if (subtitle != null) ...[ const SizedBox(height: 4), Text( subtitle!, style: TextStyle( color: Colors.white.withValues(alpha: 0.9), fontSize: 13, ), ), ], ], ), ); } }