mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-26 16:46:51 +08:00
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:
@ -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,
|
||||||
],
|
],
|
||||||
|
@ -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 {
|
||||||
|
Reference in New Issue
Block a user