Added option to open FileViewer always with system dialog, enabled by default on iOS

This commit is contained in:
2023-08-11 21:25:04 +02:00
parent bdb29029c9
commit d6ebc43e5c
8 changed files with 83 additions and 32 deletions

View File

@ -3,17 +3,17 @@ import 'dart:math';
import 'package:better_open_file/better_open_file.dart';
import 'package:flutter/material.dart';
import 'package:marianum_mobile/storage/base/settingsProvider.dart';
import 'package:photo_view/photo_view.dart';
import 'package:provider/provider.dart';
import 'package:syncfusion_flutter_pdfviewer/pdfviewer.dart';
import 'confirmDialog.dart';
import 'placeholderView.dart';
class FileViewer extends StatefulWidget {
final String path;
final bool openExternal;
final bool allowExternal;
const FileViewer({super.key, required this.path, this.openExternal = false, this.allowExternal = true});
const FileViewer({super.key, required this.path, this.openExternal = false});
@override
State<FileViewer> createState() => _FileViewerState();
@ -22,30 +22,38 @@ class FileViewer extends StatefulWidget {
class _FileViewerState extends State<FileViewer> {
PhotoViewController photoViewController = PhotoViewController();
late SettingsProvider settings = Provider.of<SettingsProvider>(context, listen: false);
late bool openExternal;
@override
void initState() {
openExternal = settings.val().fileViewSettings.alwaysOpenExternally || widget.openExternal;
super.initState();
}
@override
Widget build(BuildContext context) {
AppBar appbar({List actions = const []}) {
return AppBar(
title: Text(widget.path.split("/").last),
actions: [
Visibility(
visible: widget.allowExternal,
child: 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: widget.path, openExternal: true))),
confirmButton: "Öffnen",
).asDialog(context), icon: const Icon(Icons.open_in_new)),
IconButton(
onPressed: () => Navigator.of(context).push(
MaterialPageRoute(builder: (context) => FileViewer(path: widget.path, openExternal: true))
),
icon: const Icon(Icons.open_in_new)
),
...actions
],
);
}
switch(widget.openExternal ? "" : widget.path.split(".").last) {
switch(openExternal ? "" : widget.path.split(".").last.toLowerCase()) {
case "png":
case "jpg":
case "jpeg":
case "webp":
case "gif":
return Scaffold(
appBar: appbar(
actions: [
@ -84,7 +92,15 @@ class _FileViewerState extends State<FileViewer> {
});
}
});
return const PlaceholderView(text: "Datei wird extern geöffnet...", icon: Icons.open_in_new);
return PlaceholderView(
text: "Datei extern geöffnet",
icon: Icons.open_in_new,
button: TextButton(
onPressed: () => Navigator.of(context).pop(),
child: const Text("Zurück"),
),
);
}
}
}