From edd554f8e02bd5e002b3f4a11ad00daf7306817c Mon Sep 17 00:00:00 2001 From: Arun Govind M Date: Fri, 18 Mar 2022 19:28:18 +0530 Subject: [PATCH] Adds an alert box with text field to new folder click --- lib/widgets/workspace.dart | 57 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 2 deletions(-) diff --git a/lib/widgets/workspace.dart b/lib/widgets/workspace.dart index 4d92f9f..3a6b6eb 100644 --- a/lib/widgets/workspace.dart +++ b/lib/widgets/workspace.dart @@ -28,9 +28,12 @@ class _FilesWorkspaceState extends State { /* TO KEEP */ late final CachingScrollController horizontalController; late final CachingScrollController verticalController; + late TextEditingController textController; WorkspaceController get controller => widget.controller; + String folderName = ' '; + @override void initState() { super.initState(); @@ -38,6 +41,7 @@ class _FilesWorkspaceState extends State { initialScrollOffset: controller.lastHorizontalScrollOffset); verticalController = CachingScrollController( initialScrollOffset: controller.lastVerticalScrollOffset); + textController = TextEditingController(); controller.addListener(onControllerUpdate); } @@ -47,6 +51,7 @@ class _FilesWorkspaceState extends State { horizontalController.lastPosition.pixels; controller.lastVerticalScrollOffset = verticalController.lastPosition.pixels; + textController.dispose(); controller.removeListener(onControllerUpdate); super.dispose(); } @@ -102,10 +107,15 @@ class _FilesWorkspaceState extends State { ), tooltip: "New folder", onPressed: () async { + final folderNameDialog = await openDialog(); final PathParts currentDir = PathParts.parse(controller.currentDir); - currentDir.parts.add("sussy"); - await Directory(currentDir.toPath()).create(); + currentDir.parts.add('$folderNameDialog'); + if (folderNameDialog != null) { + await Directory(currentDir.toPath()) + .create(recursive: true); + controller.currentDir = currentDir.toPath(); + } }, splashRadius: 16, ), @@ -139,6 +149,49 @@ class _FilesWorkspaceState extends State { ); } + Future openDialog() => showDialog( + context: context, + builder: (context) => AlertDialog( + title: const Text("New Folder"), + content: TextField( + autofocus: true, + decoration: const InputDecoration( + hintText: "Folder name", + ), + controller: textController, + onSubmitted: (value) { + Navigator.pop(context, value); + }, + ), + actions: [ + TextButton( + child: const Text("Cancel"), + onPressed: () { + Navigator.pop(context); + }, + ), + TextButton( + child: const Text("Create"), + onPressed: textController.text != "" + ? () => showDialog( + context: context, + builder: (BuildContext context) => AlertDialog( + title: const Text("Folder name cannot be empty"), + actions: [ + TextButton( + child: Text("OK"), + onPressed: () { + Navigator.pop(context); + }, + ), + ]), + ) + : () => Navigator.of(context).pop(textController.text), + ), + ], + ), + ); + String get selectedItemsLabel { if (controller.selectedItems.isEmpty) return "";