import 'dart:io'; import 'package:better_open_file/better_open_file.dart'; import 'package:flutter/material.dart'; import 'package:photo_view/photo_view.dart'; import 'package:syncfusion_flutter_pdfviewer/pdfviewer.dart'; import 'confirmDialog.dart'; import 'placeholderView.dart'; class FileViewer extends StatelessWidget { final String path; final bool openExternal; const FileViewer({super.key, required this.path, this.openExternal = false}); @override Widget build(BuildContext context) { AppBar appbar = AppBar( title: Text(path.split("/").last), actions: [ IconButton(onPressed: () => ConfirmDialog( title: "Extern öffnen", content: "Möchtest du die Datei mit dem Systemdialog öffnen?", onConfirm: () => Navigator.of(context).push(MaterialPageRoute(builder: (context) => FileViewer(path: path, openExternal: true))), confirmButton: "Öffnen", ).asDialog(context), icon: const Icon(Icons.open_in_new)) ], ); switch(openExternal ? "x" : path.split(".").last) { case "png": case "jpg": case "jpeg": return Scaffold( appBar: appbar, backgroundColor: Colors.white, body: PhotoView( imageProvider: Image.file(File(path)).image, backgroundDecoration: const BoxDecoration(color: Colors.white60), ) ); case "pdf": return Scaffold( appBar: appbar, body: SfPdfViewer.file( File(path), ), ); default: OpenFile.open(path).then((result) { Navigator.of(context).pop(); if(result.type != ResultType.done) { showDialog(context: context, builder: (context) { return AlertDialog( content: Text(result.message), ); }); } }); return const PlaceholderView(text: "Datei wird extern geöffnet...", icon: Icons.open_in_new); } } }