develop-fileDownload #92

Merged
MineTec merged 3 commits from develop-fileDownload into develop 2026-01-31 22:15:50 +00:00
Showing only changes of commit 0409c5463f - Show all commits

View File

@@ -23,6 +23,12 @@ class FileViewer extends StatefulWidget {
State<FileViewer> createState() => _FileViewerState();
}
enum FileViewingActions {
openExternal,
share,
save
}
class _FileViewerState extends State<FileViewer> {
PhotoViewController photoViewController = PhotoViewController();
@@ -40,33 +46,57 @@ class _FileViewerState extends State<FileViewer> {
AppBar appbar({List actions = const []}) => AppBar(
title: Text(widget.path.split('/').last),
actions: [
IconButton(
onPressed: () => Navigator.of(context).push(
MaterialPageRoute(builder: (context) => FileViewer(path: widget.path, openExternal: true))
),
icon: const Icon(Icons.open_in_new)
),
IconButton(
onPressed: () {
Share.shareXFiles(
[XFile(widget.path)],
sharePositionOrigin: SharePositionOrigin.get(context),
);
...actions,
PopupMenuButton<FileViewingActions>(
onSelected: (value) async {
switch(value) {
case FileViewingActions.openExternal:
Navigator.of(context).push(
MaterialPageRoute(builder: (context) => FileViewer(path: widget.path, openExternal: true))
);
break;
case FileViewingActions.share:
SharePlus.instance.share(
ShareParams(
files: [XFile(widget.path)],
sharePositionOrigin: SharePositionOrigin.get(context)
)
);
break;
case FileViewingActions.save:
await FileSaver.writeBytes(await File(widget.path).readAsBytes(), widget.path.split('/').last);
if(!context.mounted) return;
InfoDialog.show(context, 'Die Datei wurde im Downloads Ordner gespeichert.');
break;
}
},
icon: const Icon(Icons.share_outlined),
itemBuilder: (context) => <PopupMenuEntry<FileViewingActions>>[
const PopupMenuItem(
value: FileViewingActions.openExternal,
child: ListTile(
leading: Icon(Icons.open_in_new),
title: Text('Extern öffnen'),
dense: true,
),
),
const PopupMenuItem(
value: FileViewingActions.share,
child: ListTile(
leading: Icon(Icons.share_outlined),
title: Text('Teilen'),
dense: true,
),
),
if(Platform.isAndroid) const PopupMenuItem(
value: FileViewingActions.save,
child: ListTile(
leading: Icon(Icons.save_alt_outlined),
title: Text('Speichern'),
dense: true,
),
),
],
),
Visibility(
visible: Platform.isAndroid,
child: IconButton(
onPressed: () async {
await FileSaver.writeBytes(await File(widget.path).readAsBytes(), widget.path.split('/').last);
if(!context.mounted) return;
InfoDialog.show(context, 'Die Datei wurde im Downloads Ordner gespeichert.');
},
icon: const Icon(Icons.save_alt_outlined)
)
),
...actions
],
);