mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-29 02:07:39 +08:00
FolderTreeView: Simplify the code drastically
This commit is contained in:
@ -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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user