Flutter树形结构展示插件flutter_tree_pro的使用
Flutter树形结构展示插件flutter_tree_pro的使用
描述
flutter_tree_pro 是一个用于Flutter应用程序中的树形选择组件。它可以帮助开发者在应用中实现分层数据的可视化与交互,如文件夹结构、组织架构等场景。
截图
使用方法
添加依赖
首先,在您的 pubspec.yaml 文件中添加 flutter_tree_pro 作为依赖:
dependencies:
  flutter_tree_pro: ^0.0.9
然后执行 flutter pub get 来安装插件。
在项目中使用
下面是一个完整的示例代码,展示了如何将 flutter_tree_pro 集成到您的Flutter应用中:
import 'dart:convert';
import 'dart:developer';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_tree_pro/flutter_tree_pro.dart';
void main() {
  runApp(MyApp());
}
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Tree Demo'),
    );
  }
}
class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, required this.title}) : super(key: key);
  final String title;
  @override
  _MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
  List<Map<String, dynamic>> treeListData = [];
  //默认数据
  List<Map<String, dynamic>> initialTreeData = [
    {"parentId": 1009, "value": "Suzhou", "id": 1011},
    {"parentId": 1009, "value": "Wuxi", "id": 1012},
    {"parentId": 1001, "value": "Brooklyn", "id": 10005},
  ];
  List<Map<String, dynamic>> _checkedList = [];
  @override
  void initState() {
    super.initState();
    loadData();
  }
  loadData() async {
    var response = await rootBundle.loadString('assets/data.json');
    setState(() {
      json.decode(response)['country'].forEach((item) {
        treeListData.add(item);
      });
    });
  }
  bool isRTL = false;
  bool isExpanded = true;
  bool isSingleSelect = false;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.blue,
        title: Text(widget.title),
      ),
      body: treeListData.isNotEmpty
          ? Column(
              children: [
                // switch RTL
                Container(
                  padding: EdgeInsets.all(10),
                  height: 50,
                  child: Row(
                    mainAxisAlignment: MainAxisAlignment.end,
                    children: [
                      Text(
                        'RTL',
                        style: TextStyle(
                          fontSize: 16,
                          fontWeight: FontWeight.bold,
                        ),
                      ),
                      SizedBox(
                        width: 10,
                      ),
                      CupertinoSwitch(
                        value: isRTL,
                        onChanged: (value) {
                          setState(() {
                            // RTL
                            isRTL = value;
                          });
                        },
                        activeColor: Colors.indigo,
                      ),
                    ],
                  ),
                ),
                Expanded(
                  child: Padding(
                    padding: const EdgeInsets.all(8.0),
                    child: FlutterTreePro(
                      initialSelectValue: 1012,
                      isSingleSelect: isSingleSelect,
                      isRTL: isRTL,
                      isExpanded: isExpanded,
                      listData: treeListData,
                      initialListData: initialTreeData,
                      config: Config(
                        parentId: 'parentId',
                        dataType: DataType.DataList,
                        label: 'value',
                      ),
                      onChecked: (List<Map<String, dynamic>> checkedList) {
                        log('checkedList: $checkedList');
                        setState(() {
                          _checkedList = checkedList;
                        });
                      },
                    ),
                  ),
                ),
                //_checkedList count
                Container(
                  padding: EdgeInsets.all(10),
                  height: 50,
                  child: Row(
                    mainAxisAlignment: MainAxisAlignment.end,
                    children: [
                      Text(
                        'Checked Count: ${_checkedList.length}',
                        style: TextStyle(
                          fontSize: 16,
                          fontWeight: FontWeight.bold,
                        ),
                      ),
                    ],
                  ),
                ),
              ],
            )
          : Center(
              child: CircularProgressIndicator(),
            ),
    );
  }
}
属性说明
| 属性名 | 描述 | 
|---|---|
| listData | 数据源 | 
| initialListData | 初始数据源 | 
| parentId | 父节点ID对应的键名 | 
| dataType | 数据源类型 | 
| label | 节点显示值对应的键名 | 
| onChecked | 当节点被选中时的回调函数 | 
| isExpanded | 是否默认展开所有项 | 
| isRTL | 是否启用从右向左布局 | 
通过上述步骤和配置,您就可以在自己的Flutter项目中轻松集成并使用 flutter_tree_pro 插件了。如果有更多问题或需要进一步的帮助,请随时提问!
更多关于Flutter树形结构展示插件flutter_tree_pro的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter树形结构展示插件flutter_tree_pro的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何使用 flutter_tree_pro 插件来展示树形结构的 Flutter 示例代码。flutter_tree_pro 是一个用于在 Flutter 应用中展示树形数据的强大插件。
首先,确保在你的 pubspec.yaml 文件中添加 flutter_tree_pro 依赖:
dependencies:
  flutter:
    sdk: flutter
  flutter_tree_pro: ^最新版本号  # 请替换为最新版本号
然后运行 flutter pub get 来安装依赖。
接下来,在你的 Dart 文件中(例如 main.dart),你可以按照以下方式使用 flutter_tree_pro:
import 'package:flutter/material.dart';
import 'package:flutter_tree_pro/flutter_tree_pro.dart';
void main() {
  runApp(MyApp());
}
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Tree Pro Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}
class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
  // 示例树形结构数据
  List<TreeNodeModel> treeData = [
    TreeNodeModel(
      title: 'Root Node 1',
      children: [
        TreeNodeModel(
          title: 'Child Node 1.1',
          children: [
            TreeNodeModel(title: 'Grandchild Node 1.1.1'),
            TreeNodeModel(title: 'Grandchild Node 1.1.2'),
          ],
        ),
        TreeNodeModel(title: 'Child Node 1.2'),
      ],
    ),
    TreeNodeModel(
      title: 'Root Node 2',
      children: [
        TreeNodeModel(title: 'Child Node 2.1'),
      ],
    ),
  ];
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Tree Pro Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: TreeView(
          data: treeData,
          nodeBuilder: (node) {
            return ListTile(
              title: Text(node.title),
              trailing: Icon(
                node.isExpanded ? Icons.expand_more : Icons.chevron_right,
              ),
              onTap: () {
                setState(() {
                  node.isExpanded = !node.isExpanded;
                });
              },
            );
          },
        ),
      ),
    );
  }
}
// TreeNodeModel 是一个简单的模型类,用于存储树节点数据
class TreeNodeModel {
  String title;
  List<TreeNodeModel> children;
  bool isExpanded = false;
  TreeNodeModel({required this.title, this.children = const []});
}
解释
- 
依赖项:
- 在 
pubspec.yaml中添加flutter_tree_pro依赖项。 
 - 在 
 - 
模型类:
TreeNodeModel类用于定义树节点的数据结构,包含标题(title)、子节点(children)以及展开状态(isExpanded)。
 - 
UI 组件:
MyApp是应用的根组件。MyHomePage是主页面,包含树形结构数据。TreeView组件用于展示树形结构,使用nodeBuilder参数来自定义每个节点的 UI。
 - 
交互:
- 节点使用 
ListTile展示,并添加点击事件来展开或收起子节点。 
 - 节点使用 
 
这样,你就能够在 Flutter 应用中使用 flutter_tree_pro 插件来展示树形结构了。当然,根据实际需求,你可以进一步自定义节点样式、添加更多功能等。
        
      
            
            
            
