Lectura de PDF de Flutter, puede mostrar el número de página y el código fuente
Agregar flutter_pdfview: ^1.2.1 componente
clase PDFScreenextends StatefulWidget {
final Stringurl;
final Stringpath;
? Título de cadena final;
? PDFScreen({Clave clave, esta.url, esta.ruta, este.título}) :super(clave: clave);
? _PDFScreenStatecreateState() =>_PDFScreenState();
}
clase _PDFScreenStateextends Statewith WidgetsBindingObserver {
final Completer_controller =
Completer() ;
? intpages =0;
? intcurrentPage =0;
? boolisReady =false;
?
? @override
? Widgetbuild(contexto BuildContext) {
return Scaffold(
appBar:AppBar(
elevación: 0,
líder: nuevo IconButton(
icono:Image.asset(
Utils.getImgPath('icon_back'),
ancho:18,
alto:36,
),
? onPressed: () {
Navegador .of(context).pop();
? },
),
centerTitle:true,
title:Texto (
widget.title,
? estilo:TextStyle(fontSize:17.0),
),
),? p>
? cuerpo:Pila(
hijos: [
Posicionado(
altura: MediaQuery.of(context).size.height - ( Utils.getHeightSize(80, contexto) *2),
ancho: MediaQuery.of(context).size.width,
hijo:PDFView(
<) p> filePath:widget.path,enableSwipe:true,
swipeHorizontal:true,
autoSpacing:false,
pageFling:true,
pageSnap:true,
defaultPage:currentPage,
fitPolicy: FitPolicy.BOTH,
preventLinkNavigation:
false, // si se establece en verdadero, el enlace se maneja en flutter
onRender: (_pages) {
setState(() {
páginas = _páginas;
isReady =true;
? });
},
onError: (error) {
setState(() {
errorMessage = error.toString();
? }); p> p>
? print(error.toString());
},
onPageError: (página, error) {
setState( () {
errorMessage ='$página: ${error.toString()}';
});
print('$página) : $ {error.toString()}');
},
onViewCreated: (PDFViewController pdfViewController) {
_controller.complete(pdfViewController);
},
onLinkHandler: (String uri) {
print('goto uri: $uri');
},
onPageChanged: (int página, int total) {
print('cambio de página: $página/$total');
setState(() {
p>página actual = página;
});
},
),
? ),
? Posicionado(
abajo:0,
? altura: Utils.getHeightSize(80, contexto),
? ancho:
MediaQuery.of(context).size.width,
? child:Container(
// padding: EdgeInsets.only(izquierda: 10.0, derecha: 10.0, arriba: 10.0, abajo: 10.0),
decoración:BoxDecoration(
color: Colors.white,
? border:Border.all(color: AppColors.shadeGary),
? boxShadow: [
//consulte :/video/6443
BoxShadow(
color: AppColors.shadeGary,
desplazamiento:Desplazamiento(0.0, 0.0),
blurRadius:3.0,
spreadRadius:0.0),
],? p> p>
),
child:Stack(
niños: [
Row(
mainAxisSize: MainAxisSize. min,
? hijos: [
Contenedor(),
Expandido(niño:SizeBox()),
Contenedor(
altura:42.0,
? ancho: Utils.getWidthSize(90, contexto),
margen:EdgeInsets.only(derecha:20.0, abajo:5.0 ),
? decoración:BoxDecoration(//Línea de borde
borderRadius:BorderRadius.circular(21.0),? //Esquinas redondeadas
gradiente:LinearGradient( p>
colores: [Color(0xFF5FD27A), Color(0xFF3FAF6F)],
),
),
? TextButton(
estilo:ButtonStyle(
overlayColor: MaterialStateProperty.all(Colors.transparent),
? primer plano
Color: MaterialStateProperty.resolveWith(
(estados) {
if (states.contains(MaterialState.pressed)) {
//Color al presionar p>
return Colors.transparent;
? }
//El estado predeterminado usa gris
return Colors.transparent;
},
? ),
),
niño:Texto(
globalTranslations.text("msg_download") ,
? estilo:TextStyle(color: Colors.white),
),
onPressed: () {
launchPdfURL ( widget.url);
},
),
),
],
),
? ],
),
? )),
errorMessage.isEmpty
!isReady
Centro(
niño:CircularProgressIndicator(),
? )
:Container()
:Centro(
niño:Texto(mensaje de error),
? )
],
),
? // flotanteActionButton: FutureBuilder(
///? futuro: _controller.future,
///? constructor: (contexto, instantánea de AsyncSnapshot) {
// if (snapshot.hasData) {
// ? return FlotanteActionButton.extended(
// etiqueta: Texto("Ir a ${pages ~/ 2} " ),
// onPressed: () async {
// ?
.setPage(páginas ~/ 2);
// },
// );
// }
/ /
// devolver contenedor();
///? },
// ),
);
? }
lanzarPdfURL(String url) {
lanzar(url);
}
} p>