FolderSelectionDialog: Make it prettier

We don't need it to have such large icons.
This commit is contained in:
Vishesh Handa
2020-01-29 17:04:18 +01:00
parent 43281bd2bb
commit 9e520e7e95
2 changed files with 122 additions and 6 deletions

View File

@ -1,6 +1,5 @@
import 'package:flutter/material.dart';
import 'package:gitjournal/core/notes_folder.dart';
import 'package:gitjournal/widgets/folder_tree_view.dart';
import 'package:provider/provider.dart';
typedef NoteFolderCallback = void Function(NotesFolder);
@ -17,7 +16,6 @@ class FolderSelectionDialog extends StatelessWidget {
onFolderEntered: (NotesFolder destFolder) {
Navigator.of(context).pop(destFolder);
},
longPressAllowed: false,
),
);
@ -28,4 +26,125 @@ class FolderSelectionDialog extends StatelessWidget {
}
}
// FIXME: Add the previously as a radio button selected Folder
typedef void FolderSelectedCallback(NotesFolder folder);
class FolderTreeView extends StatelessWidget {
final NotesFolder rootFolder;
final FolderSelectedCallback onFolderEntered;
FolderTreeView({
Key key,
@required this.rootFolder,
@required this.onFolderEntered,
}) : super(key: key);
@override
Widget build(BuildContext context) {
var tile = FolderMiniTile(
folder: rootFolder,
onTap: onFolderEntered,
);
return ListView(
children: <Widget>[tile],
);
}
}
class FolderMiniTile extends StatefulWidget {
final NotesFolder folder;
final FolderSelectedCallback onTap;
FolderMiniTile({
@required this.folder,
@required this.onTap,
});
@override
FolderMiniTileState createState() => FolderMiniTileState();
}
class FolderMiniTileState extends State<FolderMiniTile> {
final MainAxisSize mainAxisSize = MainAxisSize.min;
final CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.start;
final MainAxisAlignment mainAxisAlignment = MainAxisAlignment.center;
bool _isExpanded = true;
@override
Widget build(BuildContext context) {
return Column(
mainAxisSize: mainAxisSize,
crossAxisAlignment: crossAxisAlignment,
mainAxisAlignment: mainAxisAlignment,
children: <Widget>[
GestureDetector(
child: _buildFolderTile(),
onTap: () => widget.onTap(widget.folder),
),
_getChild(),
],
);
}
Widget _buildFolderTile() {
var folder = widget.folder;
var ic = _isExpanded ? Icons.keyboard_arrow_up : Icons.keyboard_arrow_down;
var trailling = folder.hasSubFolders
? IconButton(
icon: Icon(ic),
onPressed: expand,
)
: null;
var folderName = folder.name;
if (folder.parent == null) {
folderName = "Notes";
}
return Card(
child: ListTile(
leading: Container(
width: 16,
height: 16,
alignment: Alignment.center,
child: Icon(
Icons.folder,
size: 24,
color: Theme.of(context).accentColor,
),
),
title: Text(folderName),
trailing: trailling,
),
);
}
void expand() {
setState(() {
_isExpanded = !_isExpanded;
});
}
Widget _getChild() {
if (!_isExpanded) return Container();
var children = <FolderMiniTile>[];
widget.folder.getFolders().forEach((folder) {
children.add(FolderMiniTile(
folder: folder,
onTap: widget.onTap,
));
});
return Container(
margin: const EdgeInsets.only(left: 8.0),
child: Column(
mainAxisAlignment: mainAxisAlignment,
crossAxisAlignment: crossAxisAlignment,
mainAxisSize: mainAxisSize,
children: children,
),
);
}
}

View File

@ -10,7 +10,6 @@ class FolderTreeView extends StatefulWidget {
final FolderSelectedCallback onFolderSelected;
final Function onFolderUnselected;
final FolderSelectedCallback onFolderEntered;
final bool longPressAllowed;
FolderTreeView({
Key key,
@ -18,7 +17,6 @@ class FolderTreeView extends StatefulWidget {
@required this.onFolderEntered,
this.onFolderSelected = _doNothing,
this.onFolderUnselected = _doNothing,
this.longPressAllowed = true,
}) : super(key: key);
@override
@ -47,7 +45,6 @@ class FolderTreeViewState extends State<FolderTreeView> {
}
},
onLongPress: (folder) {
if (!widget.longPressAllowed) return;
setState(() {
inSelectionMode = true;
selectedFolder = folder;