import 'package:get/get.dart'; import 'package:pdf/pdf.dart'; import 'package:pdf/widgets.dart' as pw; import 'package:printing/printing.dart'; import '../../data/models/tank_model.dart'; import '../tanklist/tanklist_view.dart'; class PrintController extends GetxController { final argunments = Get.arguments; final List tankList = Get.arguments['tankList'] ?? []; final String year = Get.arguments['year'] ?? 'NoYear'; final String summeLiter = Get.arguments['summeLiter'] ?? '0.0'; final String summePreis = Get.arguments['summePreis'] ?? '0.0'; Future printPdfReport() async { final doc = pw.Document(); final font = await PdfGoogleFonts.robotoRegular(); final List tankungen = tankList.map((e) => AppWriteTankModel.fromMap(e)).toList(); doc.addPage( pw.Page( pageFormat: PdfPageFormat.a4, build: (pw.Context context) { return pw.Column( crossAxisAlignment: pw.CrossAxisAlignment.start, children: [ // PDF-Design hier pw.Text('Tankbericht $year', style: pw.TextStyle( fontSize: 24, fontWeight: pw.FontWeight.bold, color: PdfColors.blue900, font: font)), pw.SizedBox(height: 10), pw.Text('Alle Tankungen im Überblick', style: pw.TextStyle( fontSize: 16, color: PdfColors.grey700, font: font)), pw.Divider(color: PdfColors.grey400), pw.SizedBox(height: 20), pw.TableHelper.fromTextArray( headers: [ 'Datum', 'Ort', 'Menge (L)', 'Preis/L (€)', 'Summe (€)' ], cellAlignment: pw.Alignment.centerLeft, border: pw.TableBorder.all(color: PdfColors.grey200), headerStyle: pw.TextStyle(fontWeight: pw.FontWeight.bold, font: font), data: tankungen.map((item) { var modDate = item.date.substring(5); return [ modDate, item.location, item.liters, item.pricePerLiter, item.szSummePreis ?? '0.0', ]; }).toList(), ), pw.Spacer(), pw.Divider(color: PdfColors.grey400), pw.Container( alignment: pw.Alignment.centerRight, child: pw.Column( crossAxisAlignment: pw.CrossAxisAlignment.end, children: [ pw.Text('Jahres-Gesamtmenge: $summeLiter L', style: pw.TextStyle( fontWeight: pw.FontWeight.bold, fontSize: 16, font: font)), pw.Text('Jahres-Gesamtsumme: $summePreis €', style: pw.TextStyle( fontWeight: pw.FontWeight.bold, fontSize: 16, color: PdfColors.blue700, font: font)), ], ), ), ], ); }, ), ); // Druckansicht öffnen await Printing.layoutPdf( onLayout: (PdfPageFormat format) async => doc.save(), ); } void goToTankListPage() async { await Get.offAndToNamed(TanklistPage.namedRoute); } }