Flutter FolderView
A customizable Flutter widget for displaying hierarchical data in tree and folder views.
Installation
dependencies:
flutter_folderview: ^0.5.1
Basic Usage
import 'package:flutter_folderview/flutter_folderview.dart';
class MyWidget extends StatefulWidget {
@override
State<MyWidget> createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
final Set<String> _expandedIds = {};
@override
Widget build(BuildContext context) {
return FolderView(
data: [
Node(
id: '1',
label: 'Documents',
type: NodeType.folder,
children: [
Node(
id: '2',
label: 'Work',
type: NodeType.parent,
children: [
Node(id: '3', label: 'Report.pdf', type: NodeType.child),
],
),
],
),
],
expandedNodeIds: _expandedIds,
mode: ViewMode.folder,
onNodeTap: (node) {
if (node.type != NodeType.child) {
setState(() {
if (_expandedIds.contains(node.id)) {
_expandedIds.remove(node.id);
} else {
_expandedIds.add(node.id);
}
});
}
},
);
}
}
Node Types
NodeType.folder: Top-level container nodesNodeType.parent: Mid-level nodes that can have childrenNodeType.child: Leaf nodes
View Modes
ViewMode.folder: Hierarchical folder structure (folder → parent → child)ViewMode.tree: Flattened tree structure (parent → child)
Line Styles
theme: FlutterFolderViewTheme(
lineTheme: FolderViewLineTheme(
lineStyle: LineStyle.connector, // ├─ └─ connectors
// lineStyle: LineStyle.scope, // Vertical scope lines
// lineStyle: LineStyle.none, // No lines
),
)
Theming
FolderView(
data: nodes,
expandedNodeIds: expandedIds,
theme: FlutterFolderViewTheme(
folderTheme: FolderNodeTheme(
widget: Icon(Icons.folder),
openWidget: Icon(Icons.folder_open),
textStyle: TextStyle(fontSize: 14),
),
parentTheme: ParentNodeTheme(
widget: Icon(Icons.description),
textStyle: TextStyle(fontSize: 14),
),
childTheme: ChildNodeTheme(
widget: Icon(Icons.insert_drive_file),
textStyle: TextStyle(fontSize: 14),
selectedTextStyle: TextStyle(fontSize: 14, fontWeight: FontWeight.bold),
),
),
)
Example
See example/ for complete examples including:
- Theme customization
- Dynamic styling with resolver functions
- Large dataset handling
cd example
flutter run
Libraries
- flutter_folderview
- models/flat_node
- models/node
- services/flatten_service
- services/size_service
- themes/child_node_theme
- themes/expand_icon_theme
- themes/flutter_folder_view_theme
- themes/folder_node_theme
- themes/folder_view_line_theme
- themes/folder_view_node_style_theme
- themes/folder_view_scrollbar_theme
- themes/folder_view_spacing_theme
- themes/folder_view_theme
- themes/node_tooltip_theme
- themes/parent_node_theme
- widgets/custom_ink_well
- widgets/folder_view
- widgets/folder_view_content
- widgets/folder_view_horizontal_scrollbar
- widgets/folder_view_vertical_scrollbar
- widgets/node_widget
- widgets/synced_scroll_controllers