FolderTreeView: Simplify the code drastically

This commit is contained in:
Vishesh Handa
2019-12-04 01:09:58 +01:00
parent f2e40d4baf
commit 10c4de0769

View File

@ -8,54 +8,49 @@ import 'package:gitjournal/note_folder.dart';
typedef void ParentSelectChanged(bool isSelected); typedef void ParentSelectChanged(bool isSelected);
class TreeView extends StatelessWidget { class FolderTreeView extends StatelessWidget {
final List<FolderTile> parentList; final NoteFolder rootFolder;
TreeView({ FolderTreeView(this.rootFolder);
this.parentList = const <FolderTile>[],
});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return ListView.builder( var folderTiles = <FolderTile>[];
itemBuilder: (context, index) { rootFolder.entities.forEach((entity) {
return parentList[index]; if (entity.isNote) return;
},
itemCount: parentList.length, folderTiles.add(FolderTile(entity.folder));
});
return ListView(
children: folderTiles,
); );
} }
} }
class FolderTile extends StatefulWidget { class FolderTile extends StatefulWidget {
final NoteFolder folder; final NoteFolder folder;
final ChildList childList; //final ParentSelectChanged callback;
final MainAxisSize mainAxisSize;
final CrossAxisAlignment crossAxisAlignment;
final MainAxisAlignment mainAxisAlignment;
final ParentSelectChanged callback;
FolderTile({ FolderTile(this.folder);
@required this.folder,
@required this.childList,
this.mainAxisAlignment = MainAxisAlignment.center,
this.crossAxisAlignment = CrossAxisAlignment.start,
this.mainAxisSize = MainAxisSize.min,
this.callback,
});
@override @override
FolderTileState createState() => FolderTileState(); FolderTileState createState() => FolderTileState();
} }
class FolderTileState extends State<FolderTile> { class FolderTileState extends State<FolderTile> {
final MainAxisSize mainAxisSize = MainAxisSize.min;
final CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.start;
final MainAxisAlignment mainAxisAlignment = MainAxisAlignment.center;
bool _isExpanded = false; bool _isExpanded = false;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Column( return Column(
mainAxisSize: widget.mainAxisSize, mainAxisSize: mainAxisSize,
crossAxisAlignment: widget.crossAxisAlignment, crossAxisAlignment: crossAxisAlignment,
mainAxisAlignment: widget.mainAxisAlignment, mainAxisAlignment: mainAxisAlignment,
children: <Widget>[ children: <Widget>[
GestureDetector( GestureDetector(
child: _buildFolderTile(), child: _buildFolderTile(),
@ -86,7 +81,7 @@ class FolderTileState extends State<FolderTile> {
} }
void expand() { void expand() {
if (widget.callback != null) widget.callback(_isExpanded); //if (widget.callback != null) widget.callback(_isExpanded);
setState(() { setState(() {
_isExpanded = _toggleBool(_isExpanded); _isExpanded = _toggleBool(_isExpanded);
}); });
@ -99,37 +94,20 @@ class FolderTileState extends State<FolderTile> {
Widget _getChild() { Widget _getChild() {
if (!_isExpanded) return Container(); if (!_isExpanded) return Container();
return Container( var children = <FolderTile>[];
margin: const EdgeInsets.only(left: 16.0), widget.folder.entities.forEach((entity) {
child: widget.childList, if (entity.isNote) return;
); children.add(FolderTile(entity.folder));
}
}
/// # ChildList widget
///
/// The [ChildList] widget holds a [List] of widget which will be displayed as
/// children of the [FolderTile] widget
class ChildList extends StatelessWidget {
final List<Widget> children;
final MainAxisAlignment mainAxisAlignment;
final CrossAxisAlignment crossAxisAlignment;
final MainAxisSize mainAxisSize;
ChildList({
this.children = const <Widget>[],
this.mainAxisSize = MainAxisSize.min,
this.crossAxisAlignment = CrossAxisAlignment.start,
this.mainAxisAlignment = MainAxisAlignment.center,
}); });
@override return Container(
Widget build(BuildContext context) { margin: const EdgeInsets.only(left: 16.0),
return Column( child: Column(
mainAxisAlignment: mainAxisAlignment, mainAxisAlignment: mainAxisAlignment,
crossAxisAlignment: crossAxisAlignment, crossAxisAlignment: crossAxisAlignment,
mainAxisSize: mainAxisSize, mainAxisSize: mainAxisSize,
children: children, children: children,
),
); );
} }
} }
@ -140,9 +118,7 @@ class FolderListingScreen extends StatelessWidget {
final container = StateContainer.of(context); final container = StateContainer.of(context);
final appState = container.appState; final appState = container.appState;
var treeView = TreeView( var treeView = FolderTreeView(appState.noteFolder);
parentList: _constructParentList(appState.noteFolder.entities),
);
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
@ -153,41 +129,4 @@ class FolderListingScreen extends StatelessWidget {
drawer: AppDrawer(), drawer: AppDrawer(),
); );
} }
List<FolderTile> _constructParentList(List<NoteFSEntity> entities) {
var parents = <FolderTile>[];
entities.forEach((entity) {
if (entity.isNote) {
return;
}
var folder = entity.folder;
var p = FolderTile(
folder: folder,
childList: _constructChildList(folder.entities),
);
parents.add(p);
});
return parents;
}
ChildList _constructChildList(List<NoteFSEntity> entities) {
var children = <Widget>[];
entities.forEach((entity) {
if (entity.isNote) {
return;
}
var folder = entity.folder;
var p = FolderTile(
folder: folder,
childList: _constructChildList(folder.entities),
);
children.add(p);
});
return ChildList(children: children);
}
} }