From 10c4de07695a1ec684dcd2f98b3cc372f2131a10 Mon Sep 17 00:00:00 2001 From: Vishesh Handa Date: Wed, 4 Dec 2019 01:09:58 +0100 Subject: [PATCH] FolderTreeView: Simplify the code drastically --- lib/screens/folder_listing.dart | 131 +++++++++----------------------- 1 file changed, 35 insertions(+), 96 deletions(-) diff --git a/lib/screens/folder_listing.dart b/lib/screens/folder_listing.dart index 3c33ff0a..3ce36779 100644 --- a/lib/screens/folder_listing.dart +++ b/lib/screens/folder_listing.dart @@ -8,54 +8,49 @@ import 'package:gitjournal/note_folder.dart'; typedef void ParentSelectChanged(bool isSelected); -class TreeView extends StatelessWidget { - final List parentList; +class FolderTreeView extends StatelessWidget { + final NoteFolder rootFolder; - TreeView({ - this.parentList = const [], - }); + FolderTreeView(this.rootFolder); @override Widget build(BuildContext context) { - return ListView.builder( - itemBuilder: (context, index) { - return parentList[index]; - }, - itemCount: parentList.length, + var folderTiles = []; + rootFolder.entities.forEach((entity) { + if (entity.isNote) return; + + folderTiles.add(FolderTile(entity.folder)); + }); + + return ListView( + children: folderTiles, ); } } class FolderTile extends StatefulWidget { final NoteFolder folder; - final ChildList childList; - final MainAxisSize mainAxisSize; - final CrossAxisAlignment crossAxisAlignment; - final MainAxisAlignment mainAxisAlignment; - final ParentSelectChanged callback; + //final ParentSelectChanged callback; - FolderTile({ - @required this.folder, - @required this.childList, - this.mainAxisAlignment = MainAxisAlignment.center, - this.crossAxisAlignment = CrossAxisAlignment.start, - this.mainAxisSize = MainAxisSize.min, - this.callback, - }); + FolderTile(this.folder); @override FolderTileState createState() => FolderTileState(); } class FolderTileState extends State { + final MainAxisSize mainAxisSize = MainAxisSize.min; + final CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.start; + final MainAxisAlignment mainAxisAlignment = MainAxisAlignment.center; + bool _isExpanded = false; @override Widget build(BuildContext context) { return Column( - mainAxisSize: widget.mainAxisSize, - crossAxisAlignment: widget.crossAxisAlignment, - mainAxisAlignment: widget.mainAxisAlignment, + mainAxisSize: mainAxisSize, + crossAxisAlignment: crossAxisAlignment, + mainAxisAlignment: mainAxisAlignment, children: [ GestureDetector( child: _buildFolderTile(), @@ -86,7 +81,7 @@ class FolderTileState extends State { } void expand() { - if (widget.callback != null) widget.callback(_isExpanded); + //if (widget.callback != null) widget.callback(_isExpanded); setState(() { _isExpanded = _toggleBool(_isExpanded); }); @@ -99,37 +94,20 @@ class FolderTileState extends State { Widget _getChild() { if (!_isExpanded) return Container(); + var children = []; + widget.folder.entities.forEach((entity) { + if (entity.isNote) return; + children.add(FolderTile(entity.folder)); + }); + return Container( margin: const EdgeInsets.only(left: 16.0), - child: widget.childList, - ); - } -} - -/// # 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 children; - final MainAxisAlignment mainAxisAlignment; - final CrossAxisAlignment crossAxisAlignment; - final MainAxisSize mainAxisSize; - - ChildList({ - this.children = const [], - this.mainAxisSize = MainAxisSize.min, - this.crossAxisAlignment = CrossAxisAlignment.start, - this.mainAxisAlignment = MainAxisAlignment.center, - }); - - @override - Widget build(BuildContext context) { - return Column( - mainAxisAlignment: mainAxisAlignment, - crossAxisAlignment: crossAxisAlignment, - mainAxisSize: mainAxisSize, - children: children, + child: Column( + mainAxisAlignment: mainAxisAlignment, + crossAxisAlignment: crossAxisAlignment, + mainAxisSize: mainAxisSize, + children: children, + ), ); } } @@ -140,9 +118,7 @@ class FolderListingScreen extends StatelessWidget { final container = StateContainer.of(context); final appState = container.appState; - var treeView = TreeView( - parentList: _constructParentList(appState.noteFolder.entities), - ); + var treeView = FolderTreeView(appState.noteFolder); return Scaffold( appBar: AppBar( @@ -153,41 +129,4 @@ class FolderListingScreen extends StatelessWidget { drawer: AppDrawer(), ); } - - List _constructParentList(List entities) { - var parents = []; - 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 entities) { - var children = []; - 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); - } }