Flutter如何实现treeview控件
在Flutter中如何实现一个可展开折叠的TreeView控件?目前项目需要展示层级数据,类似文件目录结构,希望能支持动态加载子节点。尝试过几种第三方库但效果不理想,求推荐最佳实现方案或核心代码示例。需要注意哪些性能优化点?
2 回复
Flutter没有内置TreeView控件,可通过第三方库如flutter_treeview实现,或自定义使用ExpansionTile嵌套构建树形结构。
更多关于Flutter如何实现treeview控件的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
Flutter 没有内置的 TreeView 控件,但可以通过 ExpansionTile 或第三方库实现。以下是两种常用方法:
1. 使用 ExpansionTile 实现(适合简单树形结构)
class TreeNode {
final String title;
final List<TreeNode> children;
TreeNode(this.title, [this.children = const []]);
}
class TreeView extends StatelessWidget {
final List<TreeNode> nodes;
const TreeView(this.nodes, {super.key});
@override
Widget build(BuildContext context) {
return ListView(
children: nodes.map((node) => _buildTree(node)).toList(),
);
}
Widget _buildTree(TreeNode node) {
if (node.children.isEmpty) {
return ListTile(title: Text(node.title));
}
return ExpansionTile(
title: Text(node.title),
children: node.children.map(_buildTree).toList(),
);
}
}
// 使用示例
TreeView([
TreeNode('Parent 1', [
TreeNode('Child 1.1'),
TreeNode('Child 1.2'),
]),
TreeNode('Parent 2'),
])
2. 使用第三方库 flutter_treeview(功能更完整)
在 pubspec.yaml 添加依赖:
dependencies:
flutter_treeview: ^1.0.0
使用示例:
import 'package:flutter_treeview/flutter_treeview.dart';
class TreeExample extends StatefulWidget {
@override
_TreeExampleState createState() => _TreeExampleState();
}
class _TreeExampleState extends State<TreeExample> {
final TreeViewController _controller = TreeViewController(
children: [
Node(
key: '1',
label: 'Parent 1',
children: [
Node(key: '1.1', label: 'Child 1.1'),
Node(key: '1.2', label: 'Child 1.2'),
],
),
],
);
@override
Widget build(BuildContext context) {
return TreeView(
controller: _controller,
);
}
}
选择建议:
- 简单需求:使用
ExpansionTile自定义实现 - 复杂需求:使用
flutter_treeview库,支持展开/收起、图标、选中状态等
两种方法都能实现树形结构显示,根据项目复杂度选择合适方案即可。

