full_screen file viewer layout builder enhancement

This commit is contained in:
2024-10-02 11:53:53 +02:00
parent 8c12148c49
commit e0264175e6

View File

@@ -1,5 +1,9 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:patient_manager/main.dart'; import 'package:patient_manager/main.dart';
import 'package:patient_manager/mih_components/mih_layout/mih_action.dart';
import 'package:patient_manager/mih_components/mih_layout/mih_body.dart';
import 'package:patient_manager/mih_components/mih_layout/mih_header.dart';
import 'package:patient_manager/mih_components/mih_layout/mih_layout_builder.dart';
import 'package:patient_manager/mih_objects/arguments.dart'; import 'package:patient_manager/mih_objects/arguments.dart';
import 'package:syncfusion_flutter_core/theme.dart'; import 'package:syncfusion_flutter_core/theme.dart';
import 'package:syncfusion_flutter_pdfviewer/pdfviewer.dart'; import 'package:syncfusion_flutter_pdfviewer/pdfviewer.dart';
@@ -39,6 +43,180 @@ class _FullScreenFileViewerState extends State<FullScreenFileViewer> {
}); });
} }
MIHAction getActionButton() {
return MIHAction(
icon: const Icon(
Icons.fullscreen_exit,
),
iconSize: 35,
onTap: () {
Navigator.pop(context);
},
);
}
MIHHeader getHeader(double width) {
bool isPDF;
if (getExtType(widget.arguments.path).toLowerCase() == "pdf") {
isPDF = true;
} else {
isPDF = false;
}
return MIHHeader(
headerAlignment: MainAxisAlignment.end,
headerItems: [
Visibility(
visible: isPDF,
child: IconButton(
onPressed: () {
pdfViewerController.previousPage();
//print(pdfViewerController.);
//if (pdfViewerController.pageNumber > 1) {
setState(() {
currentPage = pdfViewerController.pageNumber;
});
// }
},
icon: Icon(
Icons.arrow_back,
color: MzanziInnovationHub.of(context)!.theme.secondaryColor(),
size: 35,
),
),
),
Visibility(
visible: isPDF,
child: Text(
"$currentPage / $currentPageCount",
style: const TextStyle(fontSize: 20),
),
),
Visibility(
visible: isPDF,
child: IconButton(
onPressed: () {
pdfViewerController.nextPage();
//print(pdfViewerController.pageNumber);
//if (pdfViewerController.pageNumber < currentPageCount) {
setState(() {
currentPage = pdfViewerController.pageNumber;
});
//}
},
icon: Icon(
Icons.arrow_forward,
color: MzanziInnovationHub.of(context)!.theme.secondaryColor(),
size: 35,
),
),
),
Visibility(
visible: isPDF,
child: IconButton(
onPressed: () {
if (zoomOut > 0) {
setState(() {
zoomOut = zoomOut - 100;
});
} else {
setState(() {
pdfViewerController.zoomLevel = startZoomLevel + 0.25;
startZoomLevel = pdfViewerController.zoomLevel;
});
}
},
icon: Icon(
Icons.zoom_in,
color: MzanziInnovationHub.of(context)!.theme.secondaryColor(),
size: 35,
),
),
),
Visibility(
visible: isPDF,
child: IconButton(
onPressed: () {
if (pdfViewerController.zoomLevel > 1) {
setState(() {
pdfViewerController.zoomLevel = startZoomLevel - 0.25;
startZoomLevel = pdfViewerController.zoomLevel;
});
} else {
if (zoomOut < (width - 100)) {
setState(() {
zoomOut = zoomOut + 100;
});
}
}
},
icon: Icon(
Icons.zoom_out,
color: MzanziInnovationHub.of(context)!.theme.secondaryColor(),
size: 35,
),
),
),
IconButton(
onPressed: () {
html.window.open(
widget.arguments.link,
// '${AppEnviroment.baseFileUrl}/mih/$filePath',
'download');
},
icon: Icon(
Icons.download,
color: MzanziInnovationHub.of(context)!.theme.secondaryColor(),
size: 35,
),
),
],
);
}
MIHBody getBody(double width, double height) {
Widget fileViewer;
if (getExtType(widget.arguments.path).toLowerCase() == "pdf") {
fileViewer = SizedBox(
width: width - zoomOut,
height: height - 70,
child: SfPdfViewerTheme(
data: SfPdfViewerThemeData(
backgroundColor:
MzanziInnovationHub.of(context)!.theme.primaryColor(),
),
child: SfPdfViewer.network(
widget.arguments.link,
controller: pdfViewerController,
initialZoomLevel: startZoomLevel,
pageSpacing: 2,
maxZoomLevel: 5,
interactionMode: PdfInteractionMode.pan,
onDocumentLoaded: (details) {
setState(() {
currentPage = pdfViewerController.pageNumber;
currentPageCount = pdfViewerController.pageCount;
});
},
),
),
);
} else {
fileViewer = SizedBox(
width: width,
height: height,
child: InteractiveViewer(
maxScale: 5.0,
//minScale: 0.,
child: Image.network(widget.arguments.link),
),
);
}
return MIHBody(
borderOn: false,
bodyItems: [fileViewer],
);
}
@override @override
void dispose() { void dispose() {
pdfViewerController.dispose(); pdfViewerController.dispose();
@@ -47,6 +225,7 @@ class _FullScreenFileViewerState extends State<FullScreenFileViewer> {
@override @override
void initState() { void initState() {
//pdfViewerController = widget.arguments.pdfViewerController!;
pdfViewerController.addListener(onPageSelect); pdfViewerController.addListener(onPageSelect);
super.initState(); super.initState();
} }
@@ -57,264 +236,273 @@ class _FullScreenFileViewerState extends State<FullScreenFileViewer> {
double width = size.width; double width = size.width;
double height = size.height; double height = size.height;
if (getExtType(widget.arguments.path).toLowerCase() == "pdf") { return MIHLayoutBuilder(
return Scaffold( actionButton: getActionButton(),
body: SafeArea( header: getHeader(width),
child: Stack( secondaryActionButton: null,
children: [ body: getBody(width, height),
Container( actionDrawer: null,
width: width, secondaryActionDrawer: null,
padding: const EdgeInsets.only(top: 20.0), bottomNavBar: null,
decoration: BoxDecoration( );
color: MzanziInnovationHub.of(context)!.theme.primaryColor(), // if (getExtType(widget.arguments.path).toLowerCase() == "pdf") {
), // return Scaffold(
child: Column( // body: SafeArea(
mainAxisSize: MainAxisSize.max, // child: Stack(
mainAxisAlignment: MainAxisAlignment.center, // children: [
crossAxisAlignment: CrossAxisAlignment.center, // Container(
children: [ // width: width,
const SizedBox(height: 50), // padding: const EdgeInsets.only(top: 20.0),
SizedBox( // decoration: BoxDecoration(
width: width - zoomOut, // color: MzanziInnovationHub.of(context)!.theme.primaryColor(),
height: height - 70, // ),
child: SfPdfViewerTheme( // child: Column(
data: SfPdfViewerThemeData( // mainAxisSize: MainAxisSize.max,
backgroundColor: MzanziInnovationHub.of(context)! // mainAxisAlignment: MainAxisAlignment.center,
.theme // crossAxisAlignment: CrossAxisAlignment.center,
.primaryColor(), // children: [
), // const SizedBox(height: 50),
child: SfPdfViewer.network( // SizedBox(
widget.arguments.link, // width: width - zoomOut,
controller: pdfViewerController, // height: height - 70,
initialZoomLevel: startZoomLevel, // child: SfPdfViewerTheme(
pageSpacing: 2, // data: SfPdfViewerThemeData(
maxZoomLevel: 5, // backgroundColor: MzanziInnovationHub.of(context)!
interactionMode: PdfInteractionMode.pan, // .theme
onDocumentLoaded: (details) { // .primaryColor(),
setState(() { // ),
currentPage = pdfViewerController.pageNumber; // child: SfPdfViewer.network(
currentPageCount = pdfViewerController.pageCount; // widget.arguments.link,
}); // controller: pdfViewerController,
}, // initialZoomLevel: startZoomLevel,
), // pageSpacing: 2,
), // maxZoomLevel: 5,
), // interactionMode: PdfInteractionMode.pan,
], // onDocumentLoaded: (details) {
), // setState(() {
), // currentPage = pdfViewerController.pageNumber;
Positioned( // currentPageCount = pdfViewerController.pageCount;
top: 5, // });
left: 2, // },
width: 50, // ),
height: 50, // ),
child: IconButton( // ),
onPressed: () { // ],
Navigator.pop(context); // ),
}, // ),
icon: Icon( // Positioned(
Icons.fullscreen_exit, // top: 5,
color: // left: 2,
MzanziInnovationHub.of(context)!.theme.secondaryColor(), // width: 50,
size: 35, // height: 50,
), // child: IconButton(
), // onPressed: () {
), // Navigator.pop(context);
Positioned( // },
top: 5, // icon: Icon(
right: 2, // Icons.fullscreen_exit,
//width: 50, // color:
height: 50, // MzanziInnovationHub.of(context)!.theme.secondaryColor(),
child: Row( // size: 35,
mainAxisSize: MainAxisSize.max, // ),
mainAxisAlignment: MainAxisAlignment.end, // ),
crossAxisAlignment: CrossAxisAlignment.center, // ),
children: [ // Positioned(
IconButton( // top: 5,
onPressed: () { // right: 2,
pdfViewerController.previousPage(); // //width: 50,
//print(pdfViewerController.); // height: 50,
//if (pdfViewerController.pageNumber > 1) { // child: Row(
setState(() { // mainAxisSize: MainAxisSize.max,
currentPage = pdfViewerController.pageNumber; // mainAxisAlignment: MainAxisAlignment.end,
}); // crossAxisAlignment: CrossAxisAlignment.center,
// } // children: [
}, // IconButton(
icon: Icon( // onPressed: () {
Icons.arrow_back, // pdfViewerController.previousPage();
color: MzanziInnovationHub.of(context)! // //print(pdfViewerController.);
.theme // //if (pdfViewerController.pageNumber > 1) {
.secondaryColor(), // setState(() {
size: 35, // currentPage = pdfViewerController.pageNumber;
), // });
), // // }
// SizedBox( // },
// width: 40, // icon: Icon(
// height: 40, // Icons.arrow_back,
// child: MIHTextField( // color: MzanziInnovationHub.of(context)!
// controller: cuntrController, // .theme
// hintText: "", // .secondaryColor(),
// editable: true, // size: 35,
// required: false), // ),
// ), // ),
Text( // // SizedBox(
"$currentPage / $currentPageCount", // // width: 40,
style: const TextStyle(fontSize: 20), // // height: 40,
), // // child: MIHTextField(
IconButton( // // controller: cuntrController,
onPressed: () { // // hintText: "",
pdfViewerController.nextPage(); // // editable: true,
//print(pdfViewerController.pageNumber); // // required: false),
//if (pdfViewerController.pageNumber < currentPageCount) { // // ),
setState(() { // Text(
currentPage = pdfViewerController.pageNumber; // "$currentPage / $currentPageCount",
}); // style: const TextStyle(fontSize: 20),
//} // ),
}, // IconButton(
icon: Icon( // onPressed: () {
Icons.arrow_forward, // pdfViewerController.nextPage();
color: MzanziInnovationHub.of(context)! // //print(pdfViewerController.pageNumber);
.theme // //if (pdfViewerController.pageNumber < currentPageCount) {
.secondaryColor(), // setState(() {
size: 35, // currentPage = pdfViewerController.pageNumber;
), // });
), // //}
IconButton( // },
onPressed: () { // icon: Icon(
if (zoomOut > 0) { // Icons.arrow_forward,
setState(() { // color: MzanziInnovationHub.of(context)!
zoomOut = zoomOut - 100; // .theme
}); // .secondaryColor(),
} else { // size: 35,
setState(() { // ),
pdfViewerController.zoomLevel = // ),
startZoomLevel + 0.25; // IconButton(
startZoomLevel = pdfViewerController.zoomLevel; // onPressed: () {
}); // if (zoomOut > 0) {
} // setState(() {
}, // zoomOut = zoomOut - 100;
icon: Icon( // });
Icons.zoom_in, // } else {
color: MzanziInnovationHub.of(context)! // setState(() {
.theme // pdfViewerController.zoomLevel =
.secondaryColor(), // startZoomLevel + 0.25;
size: 35, // startZoomLevel = pdfViewerController.zoomLevel;
), // });
), // }
IconButton( // },
onPressed: () { // icon: Icon(
if (pdfViewerController.zoomLevel > 1) { // Icons.zoom_in,
setState(() { // color: MzanziInnovationHub.of(context)!
pdfViewerController.zoomLevel = // .theme
startZoomLevel - 0.25; // .secondaryColor(),
startZoomLevel = pdfViewerController.zoomLevel; // size: 35,
}); // ),
} else { // ),
if (zoomOut < (width - 100)) { // IconButton(
setState(() { // onPressed: () {
zoomOut = zoomOut + 100; // if (pdfViewerController.zoomLevel > 1) {
}); // setState(() {
} // pdfViewerController.zoomLevel =
} // startZoomLevel - 0.25;
}, // startZoomLevel = pdfViewerController.zoomLevel;
icon: Icon( // });
Icons.zoom_out, // } else {
color: MzanziInnovationHub.of(context)! // if (zoomOut < (width - 100)) {
.theme // setState(() {
.secondaryColor(), // zoomOut = zoomOut + 100;
size: 35, // });
), // }
), // }
IconButton( // },
onPressed: () { // icon: Icon(
html.window.open( // Icons.zoom_out,
widget.arguments.link, // color: MzanziInnovationHub.of(context)!
// '${AppEnviroment.baseFileUrl}/mih/$filePath', // .theme
'download'); // .secondaryColor(),
}, // size: 35,
icon: Icon( // ),
Icons.download, // ),
color: MzanziInnovationHub.of(context)! // IconButton(
.theme // onPressed: () {
.secondaryColor(), // html.window.open(
size: 35, // widget.arguments.link,
), // // '${AppEnviroment.baseFileUrl}/mih/$filePath',
), // 'download');
], // },
), // icon: Icon(
), // Icons.download,
], // color: MzanziInnovationHub.of(context)!
), // .theme
), // .secondaryColor(),
); // size: 35,
} else { // ),
return Scaffold( // ),
body: Stack( // ],
children: [ // ),
Container( // ),
padding: const EdgeInsets.only(top: 50.0), // ],
width: width, // ),
// height: height, // ),
decoration: BoxDecoration( // );
color: MzanziInnovationHub.of(context)!.theme.primaryColor(), // } else {
//borderRadius: BorderRadius.circular(25.0), // return Scaffold(
// border: Border.all( // body: Stack(
// color: MzanziInnovationHub.of(context)!.theme.errorColor(), // children: [
// width: 5.0), // Container(
), // padding: const EdgeInsets.only(top: 50.0),
child: Column( // width: width,
mainAxisSize: MainAxisSize.max, // // height: height,
children: [ // decoration: BoxDecoration(
const SizedBox(height: 20), // color: MzanziInnovationHub.of(context)!.theme.primaryColor(),
Expanded( // //borderRadius: BorderRadius.circular(25.0),
child: InteractiveViewer( // // border: Border.all(
maxScale: 5.0, // // color: MzanziInnovationHub.of(context)!.theme.errorColor(),
//minScale: 0., // // width: 5.0),
child: Image.network(widget.arguments.link), // ),
), // child: Column(
), // mainAxisSize: MainAxisSize.max,
], // children: [
), // const SizedBox(height: 20),
), // Expanded(
Positioned( // child: InteractiveViewer(
top: 5, // maxScale: 5.0,
left: 2, // //minScale: 0.,
width: 50, // child: Image.network(widget.arguments.link),
height: 50, // ),
child: IconButton( // ),
onPressed: () { // ],
Navigator.pop(context); // ),
}, // ),
icon: Icon( // Positioned(
Icons.fullscreen_exit, // top: 5,
color: // left: 2,
MzanziInnovationHub.of(context)!.theme.secondaryColor(), // width: 50,
size: 35, // height: 50,
), // child: IconButton(
), // onPressed: () {
), // Navigator.pop(context);
Positioned( // },
top: 5, // icon: Icon(
right: 2, // Icons.fullscreen_exit,
width: 50, // color:
height: 50, // MzanziInnovationHub.of(context)!.theme.secondaryColor(),
child: IconButton( // size: 35,
onPressed: () { // ),
html.window.open( // ),
widget.arguments.link, // ),
// '${AppEnviroment.baseFileUrl}/mih/$filePath', // Positioned(
'download'); // top: 5,
}, // right: 2,
icon: Icon( // width: 50,
Icons.download, // height: 50,
color: // child: IconButton(
MzanziInnovationHub.of(context)!.theme.secondaryColor(), // onPressed: () {
size: 35, // html.window.open(
), // widget.arguments.link,
), // // '${AppEnviroment.baseFileUrl}/mih/$filePath',
), // 'download');
], // },
), // icon: Icon(
); // Icons.download,
} // color:
// MzanziInnovationHub.of(context)!.theme.secondaryColor(),
// size: 35,
// ),
// ),
// ),
// ],
// ),
// );
// }
} }
} }