combined actions to popup menu

This commit is contained in:
2026-01-31 22:55:49 +01:00
parent df275c0108
commit 0409c5463f

View File

@@ -23,6 +23,12 @@ class FileViewer extends StatefulWidget {
State<FileViewer> createState() => _FileViewerState(); State<FileViewer> createState() => _FileViewerState();
} }
enum FileViewingActions {
openExternal,
share,
save
}
class _FileViewerState extends State<FileViewer> { class _FileViewerState extends State<FileViewer> {
PhotoViewController photoViewController = PhotoViewController(); PhotoViewController photoViewController = PhotoViewController();
@@ -40,33 +46,57 @@ class _FileViewerState extends State<FileViewer> {
AppBar appbar({List actions = const []}) => AppBar( AppBar appbar({List actions = const []}) => AppBar(
title: Text(widget.path.split('/').last), title: Text(widget.path.split('/').last),
actions: [ actions: [
IconButton( ...actions,
onPressed: () => Navigator.of(context).push( PopupMenuButton<FileViewingActions>(
MaterialPageRoute(builder: (context) => FileViewer(path: widget.path, openExternal: true)) onSelected: (value) async {
), switch(value) {
icon: const Icon(Icons.open_in_new) case FileViewingActions.openExternal:
), Navigator.of(context).push(
IconButton( MaterialPageRoute(builder: (context) => FileViewer(path: widget.path, openExternal: true))
onPressed: () { );
Share.shareXFiles( break;
[XFile(widget.path)], case FileViewingActions.share:
sharePositionOrigin: SharePositionOrigin.get(context), 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
], ],
); );