Aidra Driver 1.3.5+68
Aidra Driver - Your path to green energy
Loading...
Searching...
No Matches
pdf_viewer_screen.dart
Go to the documentation of this file.
1import 'dart:convert';
2import 'dart:io';
3import 'package:flutter/material.dart';
4import 'package:path_provider/path_provider.dart';
5import 'package:syncfusion_flutter_pdfviewer/pdfviewer.dart';
6
7import '../../../core/ui/theme/color_palette.dart';
8import '../../../core/ui/widgets/custom_scaffold.dart';
9import '../models/document_model.dart';
10
11class PDFViewerScreen extends StatefulWidget {
13
14 const PDFViewerScreen({super.key, required this.document});
15
16 @override
17 State<PDFViewerScreen> createState() => _PDFViewerScreenState();
18}
19
20class _PDFViewerScreenState extends State<PDFViewerScreen> {
22 bool _isLoading = true;
23 // Add error state
25
26 @override
27 void initState() {
28 super.initState();
29 _loadPDF();
30 }
31
32 Future<void> _loadPDF() async {
33 setState(() {
34 _isLoading = true;
35 _errorMessage = null;
36 });
37
38 try {
39 if (widget.document.attachmentDocument.isNotEmpty) {
40 final bytes = base64Decode(widget.document.attachmentDocument);
41 final dir = await getTemporaryDirectory();
42 final file = File('${dir.path}/${widget.document.pdfFileName}');
43 await file.writeAsBytes(bytes);
44
45 setState(() {
46 _pdfPath = file.path;
47 _isLoading = false;
48 });
49 } else {
50 setState(() {
51 _isLoading = false;
52 _errorMessage = 'Document is empty';
53 });
54 }
55 } catch (e) {
56 setState(() {
57 _isLoading = false;
58 _errorMessage = 'Error loading PDF: $e';
59 });
60 }
61 }
62
63 @override
64 Widget build(BuildContext context) {
65 return CustomScaffold(
66 title: widget.document.name,
67 body: _isLoading
68 ? const Center(
69 child: CircularProgressIndicator(
71 ),
72 )
73 : _errorMessage != null
74 ? Center(
76 )
77 : _pdfPath == null
78 ? const Center(
79 child: Text('Unable to load PDF'),
80 )
82 );
83 }
84
85 Widget _buildPdfViewer() {
86 try {
87 return SfPdfViewer.file(
88 File(_pdfPath!),
89 canShowScrollHead: true,
90 canShowScrollStatus: true,
91 enableDoubleTapZooming: true,
92 onDocumentLoadFailed: (PdfDocumentLoadFailedDetails details) {
93 setState(() {
94 _errorMessage = 'Failed to load PDF: ${details.error}';
95 });
96 },
97 );
98 } catch (e) {
99 return Center(
100 child: Text('Error rendering PDF: $e'),
101 );
102 }
103 }
104}
override void initState()
class App extends StatefulWidget build(BuildContext context)
Definition app.dart:31
static const lightGreen
final DocumentModel document
override State< PDFViewerScreen > createState()
const PDFViewerScreen({super.key, required this.document})
final Widget child
class Partner String
bool _isLoading
final Color color
Definition failures.dart:1
Future< void > _loadPDF() async
class PDFViewerScreen extends StatefulWidget _pdfPath
String _errorMessage
Widget _buildPdfViewer()
final String title
style Text( '${ 'scheduling.reference'.tr()}:${collection.internalCode}', style:Theme.of(context).textTheme.bodySmall,)