用途
Syncfusion Flutter 的 SfPyramidChart 用于在 Flutter 应用中以金字塔图形式展示数据。资料说明它可可视化比例型或层级型数据,呈现为堆叠的三角形分段,适用于销售漏斗、人口分布、组织层级以及流程阶段分析等场景。
主要能力
资料中列出的能力包括:
- 金字塔定制:PyramidMode 可选 linear(按高度)或 surface(按面积);通过 height、width(百分比字符串)调整金字塔大小;用 gapRatio(0 到 1)设置分段间隙;炸裂分段(explode、explodeIndex、explodeOffset);调色板颜色、边框颜色与宽度、透明度以及 pointColorMapper。
- 系列定制:animationDuration 与 animationDelay 动画;用 EmptyPointSettings 处理空值/空数据点,空点模式有 gap、zero、drop、average;按数据点映射颜色。
- 数据标签:用 DataLabelSettings(isVisible: true) 启用;内部与外部定位(labelPosition);连接线设置(type、color、length);通过 builder 自定义标签模板;智能标签与 labelIntersectAction;溢出模式以及隐藏零值标签。
- 图例与工具提示:启用并定位图例、图例标题、项目模板、溢出行为、点击图例切换系列可见性;用 TooltipBehavior 启用工具提示,支持格式化、自定义模板与激活模式。
- 选中与回调:用 SelectionBehavior 启用分段选中、多选、切换选中、初始选中;通过 selectDataPoints 进行程序化选中;关键回调包括 onPointTap、onSelectionChanged、onTooltipRender;onRendererCreated 可配合 PyramidSeriesController 动态更新数据。
- 外观、导出与 RTL:图表标题定制(ChartTitle);图表尺寸、边距、背景颜色/图片;导出为 PNG 图片或 PDF 文档;通过 Directionality 组件或 locale 支持 RTL;无障碍方面提及对比度、字号缩放、点击目标;pixelToPoint 方法用于坐标转换。
使用方式
资料给出的使用流程为:安装包并在 pubspec.yaml 中配置;导入 package:syncfusion_flutter_charts/charts.dart;初始化组件;通过 xValueMapper / yValueMapper 绑定数据源;再按需添加标题、数据标签、图例与工具提示。文档导航建议按主题查阅 references 目录下的:getting-started.md、pyramid-customization.md、series-customization.md、data-labels.md、legend-and-tooltip.md、selection-and-callbacks.md、appearance-export-rtl.md。
最小可运行示例(保留原代码):
import 'package:flutter/material.dart';
import 'package:syncfusion_flutter_charts/charts.dart';
class PyramidChartExample extends StatelessWidget {
final List<ChartData> chartData = [
ChartData('Enterprise', 654),
ChartData('Mid-Market', 575),
ChartData('SMB', 446),
ChartData('Startup', 341),
ChartData('Individual', 160),
];
@override
Widget build(BuildContext context) {
return Scaffold(
body: SfPyramidChart(
title: ChartTitle(text: 'Sales Pipeline'),
legend: Legend(isVisible: true),
series: PyramidSeries<ChartData, String>(
dataSource: chartData,
xValueMapper: (ChartData data, _) => data.x,
yValueMapper: (ChartData data, _) => data.y,
dataLabelSettings: DataLabelSettings(isVisible: true),
),
),
);
}
}
class ChartData {
ChartData(this.x, this.y);
final String x;
final double y;
}
常见用法片段(保留原代码):
炸裂指定分段:
PyramidSeries<ChartData, String>(
explode: true,
explodeIndex: 0, // Index of segment to highlight
explodeOffset: '5%', // Distance the segment moves out
dataSource: chartData,
xValueMapper: (ChartData data, _) => data.x,
yValueMapper: (ChartData data, _) => data.y,
)
surface 模式(按面积成比例):
PyramidSeries<ChartData, String>(
pyramidMode: PyramidMode.surface, // Area ∝ Y value (vs linear: height ∝ Y)
dataSource: chartData,
xValueMapper: (ChartData data, _) => data.x,
yValueMapper: (ChartData data, _) => data.y,
)
工具提示与选中同时启用:
// In initState:
_tooltipBehavior = TooltipBehavior(enable: true);
_selectionBehavior = SelectionBehavior(enable: true);
// In widget:
SfPyramidChart(
tooltipBehavior: _tooltipBehavior,
series: PyramidSeries<ChartData, String>(
selectionBehavior: _selectionBehavior,
dataSource: chartData,
xValueMapper: (ChartData data, _) => data.x,
yValueMapper: (ChartData data, _) => data.y,
),
)
关键属性
资料以表格列出以下属性:
- series(PyramidSeries):金字塔数据系列,每个图表一个。
- title(ChartTitle):图表标题组件。
- legend(Legend):图例配置。
- tooltipBehavior(TooltipBehavior):工具提示的启用与定制。
- enableMultiSelection(bool):是否允许多选分段。
- palette(List<Color>):自定义分段颜色。
- pyramidMode(PyramidMode):linear 或 surface 尺寸模式。
- gapRatio(double):分段之间的间隙(0–1)。
- explode(bool):是否启用点击时分段炸裂。
适用场景
资料明确指出适用于销售漏斗、人口分布、组织层级、流程阶段分析,以及需要在 Flutter 中呈现比例型或层级型数据的场景;同时支持导出 PNG/PDF、RTL 与无障碍相关处理。
限制
资料未提供该组件的授权方式、收费或价格、平台支持范围、性能上限等具体限制说明,相关事实暂未提供。