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;
? final Stringtitle;
? PDFScreen({Clave, esta.url, esta.ruta, este.título}): super(clave: clave); ? _PDFScreenStatecreateState() =gt; _PDFScreenState();
}
clase _PDFScreenStateextends Statewith WidgetsBindingObserver {
final Completer_controller =
Completer( );
? intpages =0;
? intcurrentPage =0;
? ;
? @override
? Widgetbuild(contexto BuildContext) {
return Scaffold(
appBar:AppBar(
elevación: 0,
interlineado: nuevo IconButton(
icono: Image.asset(
Utils.getImgPath('icon_back'), p> p>
ancho: 18,
alto: 36,
),
? p> Navigator.of(context).pop();
?,
),
centerTitle: verdadero,
título: Texto(
widget.title,
? estilo: TextStyle(fontSize: 17.0),
),
? ,
? cuerpo: Pila(
niños: [
Posicionado(
altura: MediaQuery.of(context).size. altura - (Utils.getHeightSize(80, contexto) *2),
? ancho: MediaQuery.of(context).size.width,
hijo: PDFView(? p>
rutaarchivo:widg
et.path,
enableSwipe: verdadero,
swipeHorizontal: verdadero,
autoSpacing: falso,
pageFling: verdadero, p>
p>
pageSnap: true,
defaultPage: currentPage,
fitPolicy: FitPolicy.BOTH,
preventLinkNavigation:
false , // si se establece en true el enlace se maneja en flutter
onRender: (_pages) {
setState(() {
páginas = _páginas;
está listo =true;
}
},
onError: (error) {); p>
setState(() {
errorMessage = error.toString();
? });
print(error.toString(? ));
p>},
onPageError: (página, error) {
setState(() {
errorMessage = '$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ágina actual = página;
? });
},
,
? abajo: 0,
? alto: Utils.getHeightSize(80, contexto),
ancho: MediaQuery.of(context).size.width,
? hijo: Container(
// relleno: EdgeInsets.only(izquierda: 10.0, derecha: 10.0, arriba: 10.0, abajo: 10.0),
decoración: BoxDecoration(
color: Colors.white,
? borde: Border.all(color: AppColors.shadeGary),
boxShadow: [
> //consulte:/video/6443
BoxShadow(
color: AppColors.shadeGary,
desplazamiento: Desplazamiento(0.0, 0.0), p> p>
blurRadius: 3.0,
spreadRadius: 0.0),
],
),
hijo : Pila (
hijos: [
Fila(
mainAxisSize: MainAxisSize.min,
? hijos: [
Contenedor(),
Expandido(niño: SizedBox()),
Contenedor(
altura: 42.0,
? ancho: Utils.getWidthSize(90, contexto),
? margen: EdgeInsets.only(derecha: 20.0, abajo: 5.0),
decoración: BoxDecoration(//border) line
borderRadius: BorderRadius.circular(21.0),? //Esquinas redondeadas
gradiente: LinearGradie
nt(
colores: [Color(0xFF5FD27A), Color(0xFF3FAF6F)],
),
),
? niño: TextButton(
estilo: ButtonStyle(
overlayColor: MaterialStateProperty.all(Colors.transparent),
? foregroundColor: MaterialStateProperty.resolveWith(
(estados) {
if (states.contains(MaterialState.pressed)) {
//Color al presionar
return Colores .transparent ;
? }
// El estado predeterminado usa gris
?
? ),
),
hijo: Texto(
globalTranslations.text("msg_download"),
? estilo: TextStyle(color: Colors.white),
),
onPressed: () {
launchPdfURL(widget.url);
},
),
),
],
),
? ],
),
? )),
? errorMessage.isEmpty
!isReady
Centro(
hijo: CircularProgressIndicator(),
? )
: Contenedor()
: Centro(
niño: Texto(mensaje de error),
? )
],
? ),
? // flotanteActionButton: FutureBuilder(
///? futuro: _controller.future ,
///? constructor: (contexto, instantánea de AsyncSnapshot) {
// if (snapshot.hasData) {
// devolver FloatingActionButton.extended (
// etiqueta: Texto("Ir a ${pages ~/ 2}"),
// onPressed: () async {
/ /? espera instantánea.data.setPage(páginas ~/ 2);
// },
//
// }? p>
//
// devolver contenedor();
///? },
// ),
);
}
lanzarPdfURL(String url) {
lanzar(url);
}