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.
This commit is contained in:
Vishesh Handa
2019-12-11 21:09:40 +01:00
parent 0e8fe78323
commit 27d5af8b01
2 changed files with 28 additions and 5 deletions

View File

@ -15,6 +15,7 @@ class FolderListingScreen extends StatefulWidget {
} }
class _FolderListingScreenState extends State<FolderListingScreen> { class _FolderListingScreenState extends State<FolderListingScreen> {
final _folderTreeViewKey = GlobalKey<FolderTreeViewState>();
NotesFolder selectedFolder; NotesFolder selectedFolder;
@override @override
@ -22,6 +23,7 @@ class _FolderListingScreenState extends State<FolderListingScreen> {
final notesFolder = Provider.of<NotesFolder>(context); final notesFolder = Provider.of<NotesFolder>(context);
var treeView = FolderTreeView( var treeView = FolderTreeView(
key: _folderTreeViewKey,
rootFolder: notesFolder, rootFolder: notesFolder,
onFolderEntered: (NotesFolder folder) { onFolderEntered: (NotesFolder folder) {
var route = MaterialPageRoute( var route = MaterialPageRoute(
@ -62,15 +64,28 @@ class _FolderListingScreenState extends State<FolderListingScreen> {
if (folderName is String) { if (folderName is String) {
final container = StateContainer.of(context); final container = StateContainer.of(context);
container.renameFolder(selectedFolder, folderName); 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( return Scaffold(
appBar: AppBar( appBar: AppBar(
title: const Text('Folders'), title: title,
leading: GJAppBarMenuButton(), leading: selectedFolder == null ? GJAppBarMenuButton() : backButton,
actions: <Widget>[ actions: <Widget>[
if (selectedFolder != null) action, if (selectedFolder != null) action,
], ],

View File

@ -12,17 +12,18 @@ class FolderTreeView extends StatefulWidget {
final FolderSelectedCallback onFolderEntered; final FolderSelectedCallback onFolderEntered;
FolderTreeView({ FolderTreeView({
Key key,
@required this.rootFolder, @required this.rootFolder,
@required this.onFolderSelected, @required this.onFolderSelected,
@required this.onFolderUnselected, @required this.onFolderUnselected,
@required this.onFolderEntered, @required this.onFolderEntered,
}); }) : super(key: key);
@override @override
_FolderTreeViewState createState() => _FolderTreeViewState(); FolderTreeViewState createState() => FolderTreeViewState();
} }
class _FolderTreeViewState extends State<FolderTreeView> { class FolderTreeViewState extends State<FolderTreeView> {
bool inSelectionMode = false; bool inSelectionMode = false;
NotesFolder selectedFolder; NotesFolder selectedFolder;
@ -55,6 +56,13 @@ class _FolderTreeViewState extends State<FolderTreeView> {
children: <Widget>[tile], children: <Widget>[tile],
); );
} }
void resetSelection() {
setState(() {
selectedFolder = null;
});
widget.onFolderUnselected();
}
} }
class FolderTile extends StatefulWidget { class FolderTile extends StatefulWidget {