diff --git a/lib/screens/folder_listing.dart b/lib/screens/folder_listing.dart index 3ce36779..dfc72bc2 100644 --- a/lib/screens/folder_listing.dart +++ b/lib/screens/folder_listing.dart @@ -2,116 +2,9 @@ import 'package:flutter/material.dart'; import 'package:gitjournal/widgets/app_bar_menu_button.dart'; import 'package:gitjournal/widgets/app_drawer.dart'; +import 'package:gitjournal/widgets/folder_tree_view.dart'; import 'package:gitjournal/state_container.dart'; -import 'package:gitjournal/note_folder.dart'; - -typedef void ParentSelectChanged(bool isSelected); - -class FolderTreeView extends StatelessWidget { - final NoteFolder rootFolder; - - FolderTreeView(this.rootFolder); - - @override - Widget build(BuildContext context) { - 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 ParentSelectChanged 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: mainAxisSize, - crossAxisAlignment: crossAxisAlignment, - mainAxisAlignment: mainAxisAlignment, - children: [ - GestureDetector( - child: _buildFolderTile(), - onTap: expand, - ), - _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; - - return Card( - child: ListTile( - leading: Icon(Icons.folder), - title: Text(folder.name), - trailing: trailling, - ), - ); - } - - void expand() { - //if (widget.callback != null) widget.callback(_isExpanded); - setState(() { - _isExpanded = _toggleBool(_isExpanded); - }); - } - - bool _toggleBool(bool b) { - return b ? false : true; - } - - 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: Column( - mainAxisAlignment: mainAxisAlignment, - crossAxisAlignment: crossAxisAlignment, - mainAxisSize: mainAxisSize, - children: children, - ), - ); - } -} - class FolderListingScreen extends StatelessWidget { @override Widget build(BuildContext context) { diff --git a/lib/widgets/folder_tree_view.dart b/lib/widgets/folder_tree_view.dart new file mode 100644 index 00000000..5c57955a --- /dev/null +++ b/lib/widgets/folder_tree_view.dart @@ -0,0 +1,109 @@ +import 'package:flutter/material.dart'; + +import 'package:gitjournal/note_folder.dart'; + +typedef void ParentSelectChanged(bool isSelected); + +class FolderTreeView extends StatelessWidget { + final NoteFolder rootFolder; + + FolderTreeView(this.rootFolder); + + @override + Widget build(BuildContext context) { + 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 ParentSelectChanged 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: mainAxisSize, + crossAxisAlignment: crossAxisAlignment, + mainAxisAlignment: mainAxisAlignment, + children: [ + GestureDetector( + child: _buildFolderTile(), + onTap: expand, + ), + _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; + + return Card( + child: ListTile( + leading: Icon(Icons.folder), + title: Text(folder.name), + trailing: trailling, + ), + ); + } + + void expand() { + //if (widget.callback != null) widget.callback(_isExpanded); + setState(() { + _isExpanded = _toggleBool(_isExpanded); + }); + } + + bool _toggleBool(bool b) { + return b ? false : true; + } + + 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: Column( + mainAxisAlignment: mainAxisAlignment, + crossAxisAlignment: crossAxisAlignment, + mainAxisSize: mainAxisSize, + children: children, + ), + ); + } +}