Created
July 7, 2020 06:07
-
-
Save riccardopirani/8ee211efa4e5306f7f08a3faf500c472 to your computer and use it in GitHub Desktop.
Show multiple pdfs in flutter
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'dart:async'; | |
import 'package:advance_pdf_viewer/advance_pdf_viewer.dart'; | |
import 'package:back_button_interceptor/back_button_interceptor.dart'; | |
import 'package:flutter/material.dart'; | |
import 'package:flutter/services.dart'; | |
import 'package:printing/printing.dart'; | |
import 'package:myapp/Model/Rapporto.dart'; | |
import 'package:myapp/Model/Supporto.dart'; | |
import 'package:myapp/Model/Utente.dart'; | |
import 'package:myapp/View/Home.dart'; | |
import 'package:rflutter_alert/rflutter_alert.dart'; | |
import 'GenerazionePDF.dart'; | |
//Funzione che si occupa di visualizzare la stampa | |
Future<void> stampa(String path) async { | |
final pdf = await rootBundle.load(path); | |
await Printing.layoutPdf(onLayout: (_) => pdf.buffer.asUint8List()); | |
} | |
//Funzione che che permette di tornare alla pagina di generazione del rapporto | |
void apriGenerazioneRapportino(BuildContext context,Rapporto rc) | |
{ | |
final gr=new RapportoPage(rc); | |
Navigator.push(context, MaterialPageRoute(builder: (context) => gr)); | |
} | |
//Funzione che si occupa di inviare il documento | |
Future<void> invioDocumento(String path,Rapporto rp,Utente u,BuildContext context) async{ | |
//Dichiaro la variabile che contiene la pagina di home | |
final page = HomeViewScreen(); | |
//Funzione che esegue la conversione di un filepdf in una stringa base64 | |
String base64file=await Supporto.castDocumentToBase64(path); | |
//Funzione che si occupa dell'invio del rapportino | |
bool ris=await Rapporto.invioFile(base64file); | |
//Timer per ritardare invio rapportino | |
Timer(Duration(seconds: 1), () { | |
print("Timer di 1 secondo concluos"); | |
}); | |
//Se il rapportino è stato inviato correttamente viene visualizzato un messaggio di conferma | |
if(ris==true){ | |
Alert( | |
context: context, | |
type: AlertType.success, | |
title: "Rapportino Inviato", | |
desc: "Il rappportino è stato inviato con succeso al cliente", | |
buttons: [ | |
DialogButton( | |
child: Text( | |
"Conferma", | |
style: TextStyle(color: Colors.white, fontSize: 20), | |
), | |
onPressed: () => { | |
Navigator.push(context, MaterialPageRoute(builder: (context) => page)), | |
} | |
) | |
], | |
).show(); | |
} | |
//Se il rapportino non viene inviato correttamente viene visualizzato un messaggio di errore | |
else{ | |
Alert(context: context,title: "Errore",desc:"Invio rapportino non riuscito").show(); | |
} | |
} | |
//Classe che si occupa di mostrare il PDF a video | |
class PdfPreviewScreen extends StatefulWidget { | |
//Path del pdf | |
PdfPreviewScreen({this.file,this.path,this.rp,this.u}); | |
PDFDocument file; | |
final String path; | |
final Rapporto rp; | |
final Utente u; | |
@override | |
_PdfPreviewScreenState createState() => _PdfPreviewScreenState(); | |
} | |
class _PdfPreviewScreenState extends State<PdfPreviewScreen> { | |
bool _isLoading = true; | |
bool myInterceptor(bool stopDefaultButtonEvent) { | |
print("Bottone back disabilitato!"); // Do some stuff. | |
return true; | |
} | |
@override | |
void initState() { | |
BackButtonInterceptor.add(myInterceptor); | |
loadDocument(); | |
} | |
loadDocument() async { | |
widget.file = await PDFDocument.fromAsset(widget.path); | |
setState(() => _isLoading = false); | |
} | |
@override | |
Widget build(BuildContext context) { | |
return Scaffold( | |
appBar: AppBar( | |
title: Text('Rapportino'), | |
leading: new IconButton( | |
icon: new Icon(Icons.arrow_back), | |
onPressed: () => apriGenerazioneRapportino(context,widget.rp), | |
), | |
actions: <Widget>[ | |
IconButton( | |
icon: Icon(Icons.send), | |
onPressed: () => { | |
invioDocumento(widget.path,widget.rp,widget.u,context) | |
}, | |
), | |
IconButton( | |
icon: Icon(Icons.print), | |
onPressed: () => { | |
stampa(widget.path) | |
}, | |
) | |
],), | |
body: Center( | |
child: _isLoading | |
? Center(child: CircularProgressIndicator()) | |
: PDFViewer( | |
document: widget.file, | |
zoomSteps: 1, | |
), | |
), | |
); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment