當前位置:編程學習大全網 - 源碼下載 - Flutter PDF閱讀,可顯示頁數,源碼

Flutter PDF閱讀,可顯示頁數,源碼

添加flutter_pdfview: ^1.2.1 組件

class PDFScreenextends StatefulWidget {

final Stringurl;

? final Stringpath;

? final Stringtitle;

? PDFScreen({Key key,this.url, this.path, this.title}) :super(key: key);

? _PDFScreenStatecreateState() =>_PDFScreenState();

}

class _PDFScreenStateextends Statewith WidgetsBindingObserver {

final Completer_controller =

Completer();

? intpages =0;

? intcurrentPage =0;

? boolisReady =false;

? StringerrorMessage ='';

? @override

? Widgetbuild(BuildContext context) {

return Scaffold(

appBar:AppBar(

elevation:0,

leading:new IconButton(

icon:Image.asset(

Utils.getImgPath('icon_back'),

width:18,

height:36,

? ),

? onPressed: () {

Navigator.of(context).pop();

? },

),

centerTitle:true,

title:Text(

widget.title,

? style:TextStyle(fontSize:17.0),

),

? ),

? body:Stack(

children: [

Positioned(

height: MediaQuery.of(context).size.height - (Utils.getHeightSize(80, context) *2),

? width: MediaQuery.of(context).size.width,

? child:PDFView(

filePath:widget.path,

enableSwipe:true,

swipeHorizontal:true,

autoSpacing:false,

pageFling:true,

pageSnap:true,

defaultPage:currentPage,

fitPolicy: FitPolicy.BOTH,

preventLinkNavigation:

false, // if set to true the link is handled in flutter

onRender: (_pages) {

setState(() {

pages = _pages;

isReady =true;

? });

},

onError: (error) {

setState(() {

errorMessage = error.toString();

? });

? print(error.toString());

},

onPageError: (page, error) {

setState(() {

errorMessage ='$page: ${error.toString()}';

? });

? print('$page: ${error.toString()}');

},

onViewCreated: (PDFViewController pdfViewController) {

_controller.complete(pdfViewController);

},

onLinkHandler: (String uri) {

print('goto uri: $uri');

},

onPageChanged: (int page, int total) {

print('page change: $page/$total');

? setState(() {

currentPage = page;

? });

},

? ),

? ),

? Positioned(

bottom:0,

? height: Utils.getHeightSize(80, context),

? width: MediaQuery.of(context).size.width,

? child:Container(

// padding: EdgeInsets.only(left: 10.0, right: 10.0,top: 10.0,bottom: 10.0),

decoration:BoxDecoration(

color: Colors.white,

? border:Border.all(color: AppColors.shadeGary),

? boxShadow: [

//refer to :/video/6443

BoxShadow(

color: AppColors.shadeGary,

offset:Offset(0.0, 0.0),

blurRadius:3.0,

spreadRadius:0.0),

? ],

),

child:Stack(

children: [

Row(

mainAxisSize: MainAxisSize.min,

? children: [

Container(),

Expanded(child:SizedBox()),

Container(

height:42.0,

? width: Utils.getWidthSize(90, context),

? margin:EdgeInsets.only(right:20.0,bottom:5.0),

? decoration:BoxDecoration(//邊框線

borderRadius:BorderRadius.circular(21.0),? //圓角

gradient:LinearGradient(

colors: [Color(0xFF5FD27A), Color(0xFF3FAF6F)],

),

? ),

? child:TextButton(

style:ButtonStyle(

overlayColor: MaterialStateProperty.all(Colors.transparent),

? foregroundColor: MaterialStateProperty.resolveWith(

(states) {

if (states.contains(MaterialState.pressed)) {

//按下時的顏色

return Colors.transparent;

? }

//默認狀態使用灰色

? return Colors.transparent;

},

? ),

),

child:Text(

globalTranslations.text("msg_download"),

? style:TextStyle(color: Colors.white),

),

onPressed: () {

launchPdfURL(widget.url);

},

? ),

),

? ],

),

? ],

),

? )),

? errorMessage.isEmpty

!isReady

Center(

child:CircularProgressIndicator(),

? )

:Container()

:Center(

child:Text(errorMessage),

? )

],

? ),

? // floatingActionButton: FutureBuilder(

//? future: _controller.future,

//? builder: (context, AsyncSnapshot snapshot) {

// if (snapshot.hasData) {

// ? return FloatingActionButton.extended(

// label: Text("Go to ${pages ~/ 2}"),

// onPressed: () async {

// ? await snapshot.data.setPage(pages ~/ 2);

// },

// ? );

// }

//

// return Container();

//? },

// ),

);

? }

launchPdfURL(String url) {

launch(url);

? }

}

  • 上一篇:java dom4j怎麽實現append方法
  • 下一篇:如何使用發票打印機?報紙是怎麽進來的?
  • copyright 2024編程學習大全網