mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-28 18:03:14 +08:00
Move FolderTreeView into its own file
This commit is contained in:
@ -2,116 +2,9 @@ import 'package:flutter/material.dart';
|
|||||||
|
|
||||||
import 'package:gitjournal/widgets/app_bar_menu_button.dart';
|
import 'package:gitjournal/widgets/app_bar_menu_button.dart';
|
||||||
import 'package:gitjournal/widgets/app_drawer.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/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 = <FolderTile>[];
|
|
||||||
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<FolderTile> {
|
|
||||||
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: <Widget>[
|
|
||||||
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 = <FolderTile>[];
|
|
||||||
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 {
|
class FolderListingScreen extends StatelessWidget {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
109
lib/widgets/folder_tree_view.dart
Normal file
109
lib/widgets/folder_tree_view.dart
Normal file
@ -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 = <FolderTile>[];
|
||||||
|
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<FolderTile> {
|
||||||
|
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: <Widget>[
|
||||||
|
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 = <FolderTile>[];
|
||||||
|
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,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user