// widgets/commande_card.dart import 'package:flutter/material.dart'; import 'package:itrimobe/models/tables_order.dart'; class CommandeCard extends StatelessWidget { final TableOrder commande; final VoidCallback onAllerCaisse; const CommandeCard({ super.key, required this.commande, required this.onAllerCaisse, }); String _formatTime(DateTime dateTime) { return '${dateTime.hour.toString().padLeft(2, '0')}:${dateTime.minute.toString().padLeft(2, '0')} ${dateTime.day.toString().padLeft(2, '0')}/${dateTime.month.toString().padLeft(2, '0')}/${dateTime.year}'; } @override Widget build(BuildContext context) { return Container( margin: EdgeInsets.only(bottom: 16), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(12), border: Border.all(color: Color(0xFF28A745), width: 1), boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.05), blurRadius: 8, offset: Offset(0, 2), ), ], ), child: Padding( padding: EdgeInsets.all(20), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ // Header avec numéro de table et badge Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( ' ${commande.tablename}', style: TextStyle( fontSize: 18, fontWeight: FontWeight.bold, color: Colors.black87, ), ), Container( padding: EdgeInsets.symmetric(horizontal: 12, vertical: 6), decoration: BoxDecoration( color: Color(0xFF28A745), borderRadius: BorderRadius.circular(20), ), child: Row( mainAxisSize: MainAxisSize.min, children: [ Icon(Icons.check_circle, color: Colors.white, size: 16), SizedBox(width: 4), Text( 'Près à encaisser', style: TextStyle( color: Colors.white, fontSize: 12, fontWeight: FontWeight.w500, ), ), ], ), ), ], ), SizedBox(height: 12), // Informations détaillées Row( children: [ Icon(Icons.access_time, size: 16, color: Colors.grey[600]), SizedBox(width: 6), Text( // Fixed: Pass DateTime directly, not as string commande.date != null ? _formatTime(commande.date!) : 'Date non disponible', style: TextStyle(color: Colors.grey[600], fontSize: 14), ), ], ), SizedBox(height: 16), // Total et bouton Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, // alignItems: MainAxisAlignment.center, children: [ Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( 'Total', style: TextStyle(color: Colors.grey[600], fontSize: 14), ), Text( '${commande.total?.toStringAsFixed(2) ?? '0.00'} MGA', style: TextStyle( fontSize: 20, fontWeight: FontWeight.bold, color: Color(0xFF28A745), ), ), ], ), ElevatedButton.icon( onPressed: onAllerCaisse, icon: Icon(Icons.point_of_sale, size: 18), label: Text('Aller à la caisse'), style: ElevatedButton.styleFrom( backgroundColor: Color(0xFF28A745), foregroundColor: Colors.white, padding: EdgeInsets.symmetric(horizontal: 24, vertical: 12), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(8), ), elevation: 2, ), ), ], ), ], ), ), ); } }