import 'package:pdf/widgets.dart' as pw; import 'package:pdf/pdf.dart'; import 'package:printing/printing.dart'; import '../pages/commandes_screen.dart'; Future printOrderPDF(Order order) async { 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}'; } final pdf = pw.Document(); final pageFormat = PdfPageFormat( 204.1, // 72 mm imprimable 595.0, // 210 mm marginAll: 0, ); pdf.addPage( pw.Page( pageFormat: pageFormat, build: (pw.Context context) { return pw.Padding( padding: const pw.EdgeInsets.fromLTRB(6, 6, 6, 18), child: pw.Column( crossAxisAlignment: pw.CrossAxisAlignment.start, children: [ pw.Divider(), pw.Text('Commande n° ${order.numeroCommande}', style: pw.TextStyle(fontSize: 10, fontWeight: pw.FontWeight.bold)), pw.Text('Table: ${order.tablename}', style: pw.TextStyle(fontSize: 8)), pw.Text('Date: ${_formatTime(order.dateCommande)}', style: pw.TextStyle(fontSize: 8)), pw.SizedBox(height: 8), pw.Divider(), pw.SizedBox(height: 8), pw.Row( mainAxisAlignment: pw.MainAxisAlignment.spaceBetween, children: [ pw.Text('Désignation', style: pw.TextStyle(fontSize: 9, fontWeight: pw.FontWeight.bold)), pw.Text('Cocher', style: pw.TextStyle(fontSize: 9)), ], ), pw.SizedBox(height: 8), pw.Divider(), ...order.items.map( (item) => pw.Row( mainAxisAlignment: pw.MainAxisAlignment.spaceBetween, children: [ pw.Container( width: 120, child: pw.Text( '${item.quantite} x ${item.nom ?? 'Item'}', style: pw.TextStyle(fontSize: 8), ), ), pw.Container( width: 10, height: 10, decoration: pw.BoxDecoration( border: pw.Border.all(width: 1), ), ), ], ), ), pw.Divider(), pw.Spacer(), pw.SizedBox(height: 10), // marge visible en bas ], ), ); }, ), ); await Printing.layoutPdf( onLayout: (PdfPageFormat format) async => pdf.save(), ); }