From 27d5af8b010111225a47a17442cec3c6d85c12e6 Mon Sep 17 00:00:00 2001 From: Vishesh Handa Date: Wed, 11 Dec 2019 21:09:40 +0100 Subject: [PATCH] FolderListing: Change the scaffold when a folder is selected This way it's way more obvious. Also, add a back button so the user can cancel the selection more explicitly. --- lib/screens/folder_listing.dart | 19 +++++++++++++++++-- lib/widgets/folder_tree_view.dart | 14 +++++++++++--- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/lib/screens/folder_listing.dart b/lib/screens/folder_listing.dart index c883c455..b1d0105f 100644 --- a/lib/screens/folder_listing.dart +++ b/lib/screens/folder_listing.dart @@ -15,6 +15,7 @@ class FolderListingScreen extends StatefulWidget { } class _FolderListingScreenState extends State { + final _folderTreeViewKey = GlobalKey(); NotesFolder selectedFolder; @override @@ -22,6 +23,7 @@ class _FolderListingScreenState extends State { final notesFolder = Provider.of(context); var treeView = FolderTreeView( + key: _folderTreeViewKey, rootFolder: notesFolder, onFolderEntered: (NotesFolder folder) { var route = MaterialPageRoute( @@ -62,15 +64,28 @@ class _FolderListingScreenState extends State { if (folderName is String) { final container = StateContainer.of(context); container.renameFolder(selectedFolder, folderName); + _folderTreeViewKey.currentState.resetSelection(); } }, ); } + var backButton = IconButton( + icon: Icon(Icons.arrow_back), + onPressed: () { + _folderTreeViewKey.currentState.resetSelection(); + }, + ); + + var title = const Text("Folder"); + if (selectedFolder != null) { + title = const Text("Folder Selected"); + } + return Scaffold( appBar: AppBar( - title: const Text('Folders'), - leading: GJAppBarMenuButton(), + title: title, + leading: selectedFolder == null ? GJAppBarMenuButton() : backButton, actions: [ if (selectedFolder != null) action, ], diff --git a/lib/widgets/folder_tree_view.dart b/lib/widgets/folder_tree_view.dart index a35b9b87..74233b03 100644 --- a/lib/widgets/folder_tree_view.dart +++ b/lib/widgets/folder_tree_view.dart @@ -12,17 +12,18 @@ class FolderTreeView extends StatefulWidget { final FolderSelectedCallback onFolderEntered; FolderTreeView({ + Key key, @required this.rootFolder, @required this.onFolderSelected, @required this.onFolderUnselected, @required this.onFolderEntered, - }); + }) : super(key: key); @override - _FolderTreeViewState createState() => _FolderTreeViewState(); + FolderTreeViewState createState() => FolderTreeViewState(); } -class _FolderTreeViewState extends State { +class FolderTreeViewState extends State { bool inSelectionMode = false; NotesFolder selectedFolder; @@ -55,6 +56,13 @@ class _FolderTreeViewState extends State { children: [tile], ); } + + void resetSelection() { + setState(() { + selectedFolder = null; + }); + widget.onFolderUnselected(); + } } class FolderTile extends StatefulWidget {