From 6709e3db4792d1687457f84c452b3ceeb0a1bacf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Thu, 1 Jun 2023 18:46:25 +0200 Subject: [PATCH] Added option for file deletion --- lib/screen/pages/files/fileElement.dart | 52 ++++++++++++++++--------- lib/screen/pages/files/files.dart | 2 +- lib/widget/confirmDialog.dart | 29 ++++++++++++++ 3 files changed, 64 insertions(+), 19 deletions(-) create mode 100644 lib/widget/confirmDialog.dart diff --git a/lib/screen/pages/files/fileElement.dart b/lib/screen/pages/files/fileElement.dart index 6847bc3..da56e59 100644 --- a/lib/screen/pages/files/fileElement.dart +++ b/lib/screen/pages/files/fileElement.dart @@ -9,6 +9,8 @@ import 'package:flutter/material.dart'; import 'package:jiffy/jiffy.dart'; import 'package:marianum_mobile/api/marianumcloud/webdav/queries/listFiles/cacheableFile.dart'; import 'package:marianum_mobile/screen/pages/files/files.dart'; +import 'package:marianum_mobile/widget/confirmDialog.dart'; +import 'package:marianum_mobile/widget/unimplementedDialog.dart'; import 'package:path_provider/path_provider.dart'; import '../../../api/marianumcloud/webdav/webdavApi.dart'; @@ -16,7 +18,8 @@ import '../../../api/marianumcloud/webdav/webdavApi.dart'; class FileElement extends StatefulWidget { final CacheableFile file; final List path; - const FileElement(this.file, this.path, {Key? key}) : super(key: key); + final void Function() refetch; + const FileElement(this.file, this.path, this.refetch, {Key? key}) : super(key: key); static Future download(String remotePath, String name, Function(double) onProgress, Function(OpenResult) onDone) async { Directory paths = await getApplicationDocumentsDirectory(); @@ -147,23 +150,36 @@ class _FileElementState extends State { } }, onLongPress: () { - showModalBottomSheet( - context: context, - builder: (context) { - return ListView( - children: [ - ListTile( - leading: const Icon(Icons.delete_outline), - title: Text("'${widget.file.name}' Löschen"), - ), - const ListTile( - leading: Icon(Icons.share_outlined), - title: Text("Teilen"), - ) - ], - ); - }, - ); + showDialog(context: context, builder: (context) { + return SimpleDialog( + children: [ + ListTile( + leading: const Icon(Icons.delete_outline), + title: const Text("Löschen"), + onTap: () { + Navigator.of(context).pop(); + showDialog(context: context, builder: (context) => ConfirmDialog( + title: "Element löschen?", + content: "Das Element wird unwiederruflich gelöscht.", + onConfirm: () { + WebdavApi.webdav + .then((value) => value.delete(widget.file.path)) + .then((value) => widget.refetch()); + } + )); + }, + ), + ListTile( + leading: const Icon(Icons.share_outlined), + title: const Text("Teilen"), + onTap: () { + Navigator.of(context).pop(); + UnimplementedDialog.show(context); + }, + ) + ], + ); + }); }, ); } diff --git a/lib/screen/pages/files/files.dart b/lib/screen/pages/files/files.dart index ba234cd..8b858d8 100644 --- a/lib/screen/pages/files/files.dart +++ b/lib/screen/pages/files/files.dart @@ -226,7 +226,7 @@ class _FilesState extends State { itemCount: files.length, itemBuilder: (context, index) { CacheableFile file = files.toList()[index]; - return FileElement(file, widget.path); + return FileElement(file, widget.path, _query); }, ), ) diff --git a/lib/widget/confirmDialog.dart b/lib/widget/confirmDialog.dart new file mode 100644 index 0000000..6c841ac --- /dev/null +++ b/lib/widget/confirmDialog.dart @@ -0,0 +1,29 @@ +import 'package:flutter/material.dart'; + +class ConfirmDialog extends StatelessWidget { + final String title; + final String content; + final IconData? icon; + final String confirmButton; + final String cancelButton; + final void Function() onConfirm; + const ConfirmDialog({Key? key, required this.title, this.content = "", this.icon, this.confirmButton = "Ok", this.cancelButton = "Abbrechen", required this.onConfirm}) : super(key: key); + + @override + Widget build(BuildContext context) { + return AlertDialog( + icon: icon != null ? Icon(icon) : null, + title: Text(title), + content: Text(content), + actions: [ + TextButton(onPressed: () { + Navigator.of(context).pop(); + }, child: Text(cancelButton)), + TextButton(onPressed: () { + onConfirm(); + Navigator.of(context).pop(); + }, child: Text(confirmButton)), + ], + ); + } +}