搜索插件、代码仓与 APP 分类

flutter_tree_pro 封面
插件详情v0.0.15

flutter_tree_pro

Flutter 树形选择小部件。您可以使用它来选择树节点。这也支持从右到左(RTL)。

AndroidiOSWebmacOSWindowsLinux
近 30 天下载
140
喜欢数
28
Pub 分数
150

安装插件

flutter pub add flutter_tree_pro

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

Flutter Tree Pro 是一个可自定义的树形选择控件,适用于 Flutter,使用户能够轻松导航和选择分层数据结构。它支持从右到左(RTL)布局,适合多语言应用程序。该包可无缝集成到 Android、iOS、Web、macOS、Windows 和 Linux 平台。设计用于直观的用户交互,允许开发者构建复杂的基于树的界面,如文件浏览器、组织结构图或类别选择器。其轻量且灵活的架构确保即使在大数据集下也能实现流畅性能。

适合场景

  • 文件资源管理器界面
  • 组织架构图显示
  • 类别过滤系统
  • 分层数据选择
  • 设置导航菜单

主要特点

  • RTL 支持
  • 跨平台兼容性
  • 可自定义的节点样式
  • 大型树结构的高效渲染
  • 多选功能

适合对象

  • 开发分层用户界面的开发者
  • 需要树状导航的应用程序
  • 国际化应用程序
  • 复杂数据结构可视化
  • 具有共享代码库的 Web 和移动应用

使用建议

  • 可能需要自定义样式以支持复杂主题
  • 极深树结构带来的性能影响
  • 有限的内置动画
  • 需要手动处理状态管理
  • 不适用于实时协作编辑

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

flutter_tree_pro

A Flutter tree-select widget with checkbox selection, single-select mode, RTL support, and leaf-node drag-and-drop.

Demo

flutter_tree demo

Features

  • Build tree data from flat list (DataType.DataList) or nested map (DataType.DataMap)
  • Multi-select with parent/child check-state synchronization
  • Single-select mode with initial selected node
  • Expand/collapse nodes
  • RTL layout support
  • Custom tree connector line style (TreeLineStyle)
  • Drag-and-drop for leaf nodes
    • Drop on a non-leaf node: dragged leaf becomes a child of that node
    • Drop on a leaf node: dragged leaf is inserted after target leaf as a sibling

Installation

Add dependency to your pubspec.yaml:

dependencies:
  flutter_tree_pro: ^0.0.16

Then run:

flutter pub get

Quick Start (DataList)

import 'package:flutter/material.dart';
import 'package:flutter_tree_pro/flutter_tree_pro.dart';

class TreeDemo extends StatefulWidget {
  const TreeDemo({super.key});

  @override
  State<TreeDemo> createState() => _TreeDemoState();
}

class _TreeDemoState extends State<TreeDemo> {
  final List<Map<String, dynamic>> listData = [
    {'id': 1001, 'parentId': 0, 'value': 'USA'},
    {'id': 1002, 'parentId': 1001, 'value': 'California'},
    {'id': 1003, 'parentId': 1002, 'value': 'San Francisco'},
    {'id': 1004, 'parentId': 1001, 'value': 'New York'},
  ];

  final List<Map<String, dynamic>> initialListData = [
    {'id': 1003, 'parentId': 1002, 'value': 'San Francisco'},
  ];

  List<Map<String, dynamic>> checked = [];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('flutter_tree_pro')),
      body: FlutterTreePro(
        listData: listData,
        initialListData: initialListData,
        isExpanded: true,
        isRTL: false,
        isSingleSelect: false,
        config: const Config(
          dataType: DataType.DataList,
          id: 'id',
          parentId: 'parentId',
          label: 'value',
          children: 'children',
          lineStyle: TreeLineStyle(
            color: Color(0xFFE0E0E0),
            width: 1.0,
            indent: 28,
            showVerticalLine: true,
            showHorizontalLine: true,
          ),
        ),
        onChecked: (items) {
          setState(() {
            checked = items;
          });
        },
      ),
    );
  }
}

Data Source Modes

DataType.DataList

Use flat list data with id + parentId and pass it through listData.

Required fields in each item (or mapped by Config):

  • id
  • parentId
  • label (for display text)
DataType.DataMap

Use nested tree data with children and pass it through treeData.

If treeData is empty and initialTreeData is provided, initialTreeData will be used as fallback root data.

API

FlutterTreePro parameters
Parameter Type Default Description
treeData List<Map<String, dynamic>> const [] Tree source for DataMap mode
listData List<Map<String, dynamic>> const [] Flat source for DataList mode
initialTreeData Map<String, dynamic> const {} Fallback root tree node when treeData is empty
initialListData List<Map<String, dynamic>> const [] Initial checked items in multi-select mode
config Config const Config() Field mapping and tree style config
onChecked Function(List<Map<String, dynamic>>) required Selection callback
isExpanded bool false Expand all nodes initially
isRTL bool false Enable right-to-left layout
isSingleSelect bool false Enable single-select mode
initialSelectValue int 0 Initial selected node ID in single-select mode
Config
Field Type Default Description
dataType DataType DataType.DataMap Data mode
id String 'id' Node ID key
parentId String 'parentId' Parent ID key
label String 'label' Display text key
value String 'value' Reserved compatibility field
children String 'children' Children key
lineStyle TreeLineStyle const TreeLineStyle() Connector line style
TreeLineStyle
Field Type Default Description
color Color Color(0xFFD9D9D9) Line color
width double 1.0 Line width
indent double 24.0 Per-level indentation
showVerticalLine bool true Show vertical connectors
showHorizontalLine bool true Show horizontal connectors

Drag-and-Drop Rules

  • Only leaf nodes can be dragged.
  • A node cannot be dropped onto itself.
  • A node cannot be dropped directly onto its current parent.
  • Drop on a leaf node inserts after that target leaf, keeping the same parent level.
  • Drop on a non-leaf node appends as the target node's child.

Notes

  • In multi-select mode, onChecked returns checked leaf nodes after internal filtering/deduplication.
  • In single-select mode, onChecked returns at most one selected node.
  • Config.value is reserved for compatibility and is not used by current select-state logic.

Example Project

See /example for a runnable demo:

cd example
flutter pub get
flutter run

License

MIT

所属分类

源码仓库

使用此插件的项目

暂无相关数据。