Flutter树形结构展示插件flutter_tree_pro的使用

发布于 1周前 作者 vueper 来自 Flutter

Flutter树形结构展示插件flutter_tree_pro的使用

描述

flutter_tree_pro 是一个用于Flutter应用程序中的树形选择组件。它可以帮助开发者在应用中实现分层数据的可视化与交互,如文件夹结构、组织架构等场景。

截图

flutter_tree

使用方法

添加依赖

首先,在您的 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

1 回复

更多关于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 []});
}

解释

  1. 依赖项

    • pubspec.yaml 中添加 flutter_tree_pro 依赖项。
  2. 模型类

    • TreeNodeModel 类用于定义树节点的数据结构,包含标题(title)、子节点(children)以及展开状态(isExpanded)。
  3. UI 组件

    • MyApp 是应用的根组件。
    • MyHomePage 是主页面,包含树形结构数据。
    • TreeView 组件用于展示树形结构,使用 nodeBuilder 参数来自定义每个节点的 UI。
  4. 交互

    • 节点使用 ListTile 展示,并添加点击事件来展开或收起子节点。

这样,你就能够在 Flutter 应用中使用 flutter_tree_pro 插件来展示树形结构了。当然,根据实际需求,你可以进一步自定义节点样式、添加更多功能等。

回到顶部