Crear código fuente PDF en línea
La pantalla de clase pdf extiende el widget con estado {
Cadena final;
? Ruta final de la cadena;
? título de cadena final;
? PDFScreen({Clave clave, esta.url, esta.ruta, este.título}): super(Clave: Clave);
? _ pdfscreenstate createstate()= gt; _ pdf screenstate();
}
clase _ pdfscrenstateextiende el estado con WidgetsBindingObserver {
finalizer_controller=
Completo();
? int páginas = 0;
? intcurrentPage = 0;
? boolisReady = false
? StringerrorMessage = "";
? @portada
? Widgetbuild(contexto BuildContext){
return scaffold(
appBar: AppBar(
elevación: 0,
principal: nuevo botón de icono (
Icono: Image.asset(
Utils.getImgPath('icon_back '),
Ancho: 18,
Alto: 36,
? onPressed: () {
pop();
},
),
Título central: Sí,
Título: Texto (
widget.title,
? Estilo: TextStyle(fontSize: 17.0),
),
? Texto: Pila (
Niños: [
Posicionado (
altura: consulta de medios . de( contexto). Subproyecto: PDFView(
filePath: widget.path,
enableSwipe: True,
swipeHorizontal: True,
Espaciado automático: False,
pageFling: Verdadero,
pageSnap: Sí,
defaultPage: currentPage
fitPolicy: FitPolicy.
Ambos,
Evitar la navegación:
falso, //Si se establece en verdadero, maneja los enlaces en flutter
onRender: (_pages) {
setState(() {
páginas = _ páginas
isReady = true
?});
}, p>
onError: (error){
setState(() {
mensaje de error = error . tostring();
> });
? print(error . tostring());
},
onPageError: (página, error){
setState(() {
mensaje de error = '$página:${error .tostring()}';
});
? print(' $página: $ { error . tostring()} ');
},
onview creado: (controlador de vista pdf controlador de vista pdf){
_ controlador .complete(controlador de vista pdf);
},
onLinkHandler: (cadena uri) {
print(' ir a uri: $ uri ');
},
onPageChanged: (int página, int total) {
print('Cambio de página: $ página/$ total ');
? setState(() {
currentPage = página
?});
},
? ),
? ),
? Posicionado (
Abajo: 0,
? alto: Utils.getHeightSize(80, contexto),
? ancho: consulta de medios. de (contexto). tamaño . ancho,
? sub: contenedor(
// padding: EdgeInsets.only(izquierda: 10.0, derecha: 10.0, arriba: 10.0, abajo: 10.0), < / p>
Decoración: BoxDecoration(
Color: color. blanco,
?border: borde. todo(color: colores de la aplicación. tono Gary),
?boxShadow: [
//Referencia:/video/6443
BoxShadow(
Color: AppColors.shadeGary,
desplazamiento: Desplazamiento(0.0, 0.0),
Radio de desenfoque: 3.0,
Radio de difusión: 0.0),
],
),
Niños: pila(
Niños: [
fila(
mainAxisSize: MainAxisSize.min,
?Niños: [
Contenedor(),<
/p>
Expandir(child:SizeBox()),
Contenedor(
Alto: 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
Degradado: degradado lineal (
Color: [color(0xFF5FD27A), color(0xFF3FAF6F)],
p>),
? child: TextButton(
Estilo: ButtonStyle(
color de superposición: materialstateproperty . all(colors . transparent),
? color de primer plano: materialstateproperty . resolver con(
(estado){
if(Estados. contiene (estado del material. presionado)){
//Color al presionar
Devolver colores.transparent
?}
//El estado predeterminado es gris
. ? ReturnColors.transparent
},
?),
Niños: texto(
traducciones globales . texto(" msg _ descargar ").
? Estilo: TextStyle(Color:Colors.white),
),
onPressed: () {
launchPdfURL(widget . URL
);},
? ),
),
? ],
),
? ],
),
? )),
? errorMessage.isEmpty
! isReady
centro(
niño: indicador de progresión circular(),
?)
: contenedor()
: Centro(
niño: Texto(mensaje de error),
?)
],
? ),
? //botón de acción flotante: Future Builder(
//?Future: _controller.future,
//?Builder: (contexto, instantánea asíncrona){
// if (snapshot.hasData) {
// ?return botón de acción flotante extendido(
// label: Text("Ir a ${pages ~/ 2 } ",
// onPressed: () async {
// ?esperar instantánea . datos . configurar página(páginas ~/2);
/ / },
// ?);
// }
//
//devolver contenedor();< / p>
//?},
// ),
);
? }
launchPdfURL(String url) {
Launch(URL);
? }
}