import 'package:flutter/material.dart'; import 'dart:io'; import 'pdf_generator.dart'; class PdfTest { static Future testPdfGeneration(BuildContext context) async { try { // Show loading indicator showDialog( context: context, barrierDismissible: false, builder: (context) => const Center( child: CircularProgressIndicator(), ), ); // Create test data final testData = { 'productivity': 5.5, 'cost': 5000000.0, 'income': 8000000.0, 'profit': 3000000.0, 'profit_margin': 60.0, 'status': 'Baik', 'seed_cost': 1000000.0, 'fertilizer_cost': 1500000.0, 'pesticide_cost': 800000.0, 'labor_cost': 1200000.0, 'irrigation_cost': 500000.0, 'crop_name': 'Padi Test', }; // Generate PDF final pdfGenerator = HarvestPdfGenerator(); final pdfFile = await pdfGenerator.generatePdf( title: 'Test PDF', harvestData: testData, scheduleData: null, dailyLogs: null, ); // Close loading dialog if (!context.mounted) return; Navigator.pop(context); // Show success dialog showDialog( context: context, builder: (context) => AlertDialog( title: const Text('PDF Berhasil Dibuat'), content: SingleChildScrollView( child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ const Text('PDF disimpan di:'), const SizedBox(height: 8), Text( pdfFile.path, style: const TextStyle(fontWeight: FontWeight.bold), ), const SizedBox(height: 16), const Text( 'Catatan: PDF disimpan di direktori internal aplikasi yang tidak memerlukan izin khusus.', style: TextStyle(fontSize: 12, fontStyle: FontStyle.italic), ), ], ), ), actions: [ TextButton( onPressed: () { Navigator.pop(context); }, child: const Text('Tutup'), ), TextButton( onPressed: () { Navigator.pop(context); _sharePdf(context, pdfFile); }, child: const Text('Bagikan'), ), TextButton( onPressed: () { Navigator.pop(context); _openPdf(context, pdfFile); }, child: const Text('Buka'), ), ], ), ); } catch (e, stackTrace) { // Close loading dialog if open if (!context.mounted) return; Navigator.pop(context); // Show detailed error showDialog( context: context, builder: (context) => AlertDialog( title: const Text('Error'), content: SingleChildScrollView( child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ const Text('Gagal membuat PDF:'), const SizedBox(height: 8), Text(e.toString(), style: const TextStyle(fontWeight: FontWeight.bold)), const SizedBox(height: 16), const Text('Stack Trace:', style: TextStyle(fontWeight: FontWeight.bold)), Text(stackTrace.toString(), style: const TextStyle(fontSize: 12)), ], ), ), actions: [ TextButton( onPressed: () => Navigator.pop(context), child: const Text('OK'), ), ], ), ); } } static Future _openPdf(BuildContext context, File file) async { try { final pdfGenerator = HarvestPdfGenerator(); await pdfGenerator.openPdf(file); } catch (e) { // If opening fails, show a dialog with options if (!context.mounted) return; showDialog( context: context, builder: (context) => AlertDialog( title: const Text('Gagal Membuka PDF'), content: Column( mainAxisSize: MainAxisSize.min, children: [ const Text( 'Tidak dapat membuka file PDF secara langsung. ' 'Silakan bagikan file untuk dibuka dengan aplikasi lain.' ), const SizedBox(height: 8), Text( 'Error: ${e.toString()}', style: const TextStyle(fontSize: 12, color: Colors.red), ), ], ), actions: [ TextButton( onPressed: () => Navigator.pop(context), child: const Text('Tutup'), ), TextButton( onPressed: () { Navigator.pop(context); _sharePdf(context, file); }, child: const Text('Bagikan'), ), ], ), ); } } static Future _sharePdf(BuildContext context, File file) async { try { final pdfGenerator = HarvestPdfGenerator(); await pdfGenerator.sharePdf(file); } catch (e) { if (!context.mounted) return; showDialog( context: context, builder: (context) => AlertDialog( title: const Text('Error'), content: Text('Gagal membagikan PDF: ${e.toString()}'), actions: [ TextButton( onPressed: () => Navigator.pop(context), child: const Text('OK'), ), ], ), ); } } }