【免费下载链接】fl_chart
FL Chart is a highly customizable Flutter chart library that supports Line Chart, Bar Chart, Pie Chart, Scatter Chart, Radar Chart and Candlestick Chart.
FL Chart 是当前仓库(gh_mirrors/fl/fl_chart)所维护的一个高度可定制的 Flutter 图表库,支持折线图、柱状图、饼图、散点图、雷达图、K 线图与仪表盘等多种图表类型。本篇指南以仓库根目录 README.md 为主体,结合 pubspec.yaml 与lib/src/chart下的源码实现,系统讲解如何安装依赖、选择图表类型、阅读示例源码、配置数据模型,并深入剖析其内置的隐式动画与触摸交互机制,帮助你在 Flutter 应用中快速落地一套可交互、可动画的数据可视化方案。
FL Chart 是什么:一个高度可定制的 Flutter 图表库
根据 README.md 的 Overview 章节,FL Chart 的核心定位是highly customizable(高度可定制):你不仅可以用最简代码画出一张基础图表,还可以通过数据类上的大量参数,精细控制颜色、渐变、标题、网格、边框、触摸反馈等每一个视觉与交互细节。
从 pubspec.yaml 可以确认该项目当前的发布信息:
- 包名:
fl_chart,版本1.2.0; - 描述:A highly customizable Flutter chart library that supports Line Chart, Bar Chart, Pie Chart, Scatter Chart, and Radar Chart;
- 运行时约束:Dart SDK
>=3.6.2 <4.0.0,Flutter>=3.27.4; - 运行时依赖仅有两个:
equatable(用于数据类的值相等比较,支撑隐式动画的差异计算)与vector_math(用于图表几何变换),足见核心库本身非常轻量; - 开发依赖包含
flutter_test、mockito、build_runner与very_good_analysis,说明项目自带完整测试体系与严格 lint 规范。
所有公开 API 由 lib/fl_chart.dart 统一导出,涵盖LineChart、BarChart、PieChart、ScatterChart、RadarChart、CandlestickChart、GaugeChart以及它们对应的 Data 类,用户只需import 'package:fl_chart/fl_chart.dart';即可使用全部能力。
支持的图表类型一览
README.md 的 Chart Types 章节用表格展示了六类图表及其示例:
| 图表类型 | 公开 Widget(源码位置) | 核心数据类 |
|---|---|---|
| 折线图 LineChart | lib/src/chart/line_chart/line_chart.dart | LineChartData |
| 柱状图 BarChart | lib/src/chart/bar_chart/bar_chart.dart | BarChartData |
| 饼图 PieChart | lib/src/chart/pie_chart/pie_chart.dart | PieChartData |
| 散点图 ScatterChart | lib/src/chart/scatter_chart/scatter_chart.dart | ScatterChartData |
| 雷达图 RadarChart | lib/src/chart/radar_chart/radar_chart.dart | RadarChartData |
| K 线图 CandlestickChart | lib/src/chart/candlestick_chart/candlestick_chart.dart | CandlestickChartData |
此外,从 repo_files/documentations/index.md 与源码目录可以确认,仓库还额外提供了GaugeChart(仪表盘图)(lib/src/chart/gauge_chart/gauge_chart.dart)——README 的 Overview 未列出它,但它是当前仓库实际支持并可用的第七种图表类型。
每种图表在 repo_files/documentations/ 下都配有独立文档,例如 line_chart.md、bar_chart.md、pie_chart.md、scatter_chart.md、radar_chart.md、candlestick_chart.md,每篇文档都给出了对应的 Sample 源码位置,是深入学习各图表参数的首选入口。
快速开始:安装依赖并阅读文档
README.md 的 "Let's get started" 章节给出了三步入门路径:
- 添加依赖:在项目的
pubspec.yaml的dependencies中添加fl_chart,然后执行flutter pub get。结合 pubspec.yaml 的约束,请确保你的环境满足 Dart SDK>=3.6.2 <4.0.0、Flutter>=3.27.4; - 阅读文档:从 repo_files/documentations/index.md 开始,它作为文档总目录,列出全部图表文档、迁移指南、触摸处理、动画处理 与变换处理 等专题;
- 查看示例源码:README 明确建议开发者直接阅读 Sample 源码,这是理解 API 用法最直接的方式。
示例应用源码位于仓库的 example/lib/ 目录,所有 Sample 集中在 example/lib/presentation/samples/,按图表类型分目录组织:
- 折线图:
line/line_chart_sample1.dart~line_chart_sample13.dart; - 柱状图:
bar/bar_chart_sample1.dart~bar_chart_sample8.dart; - 饼图:
pie/pie_chart_sample1.dart~pie_chart_sample4.dart; - 散点图、雷达图、K 线图、仪表盘等各有对应 Sample。
以 example/lib/presentation/samples/line/line_chart_sample1.dart 为例,其_LineChart组件通过一个布尔开关isShowingMainData在两组LineChartData之间切换数据,并配合duration: const Duration(milliseconds: 250)让图表在两组数据间平滑过渡——这正是 README 所说"隐式动画"的典型用法。
核心用法:图表 Widget + 数据模型
所有图表 Widget 都遵循同一个模式:外层是图表 Widget(如LineChart),内层传入对应的 Data 对象(如LineChartData)。以折线图为例(来自 line_chart.md 的 How to use 章节):
LineChart( LineChartData( // 参见 LineChartData 一节 ), duration: Duration(milliseconds: 150), // 可选 curve: Curves.linear, // 可选 );LineChartData是折线图的数据总纲(完整参数表见 line_chart.md),常用配置包括:
| 参数 | 作用 | 默认值 |
|---|---|---|
lineBarsData | 折线的数据列表,支持多条线叠加绘制 | [] |
titlesData | 四周边轴标题,见FlTitlesData | FlTitlesData() |
gridData | 背景网格线 | FlGridData() |
borderData | 图表四周边框 | FlBorderData() |
minX/maxX/minY/maxY | 坐标轴范围;不提供时自动从数据读取(手动指定性能更好) | null(自动计算) |
baselineX/baselineY | 坐标轴基线 | 0 |
lineTouchData | 触摸交互配置 | LineTouchData() |
clipData | 裁剪绘制区域,防止越界绘制 | FlClipData.none() |
backgroundColor | 图表背景色 | null |
rotationQuarterTurns | 以 90° 为单位顺时针旋转图表 | 0 |
每条折线由LineChartBarData描述(见 line_chart.md):通过spots传入FlSpot(x、y 坐标点),color/gradient控制颜色,barWidth控制线宽,isCurved与curveSmoothness控制曲线平滑,belowBarData/aboveBarData控制线下/线上面积填充,dotData控制数据点样式,dashArray可绘制虚线。
这些基础配置对象(FlBorderData、FlTitlesData、FlGridData、FlSpot、FlLine等)由所有图表共用,其字段说明集中在 repo_files/documentations/base_chart.md。例如FlGridData支持drawHorizontalLine/drawVerticalLine分别开关横纵网格线,horizontalInterval/verticalInterval控制网格间距(不填则由库自动计算合适的间隔)。
源码实现上,LineChart的构建逻辑在 lib/src/chart/line_chart/line_chart.dart 中体现:当minX/maxX/minY/maxY为NaN时,会通过LineChartHelper.calculateMaxAxisValues自动从lineBarsData计算坐标范围——印证了文档中"不提供范围时自动读取"的行为描述。
隐式动画:改数据即自动过渡
README.md 在快速开始一节专门引出了动画专题文档 handle_animations.md。其核心结论是:FL Chart 的所有动画都是隐式的。
从源码看,这一点非常直观:lib/src/chart/line_chart/line_chart.dart 中LineChart直接继承自 Flutter 的ImplicitlyAnimatedWidget,其 State 继承AnimatedWidgetBaseState,并通过内部维护的LineChartDataTween在旧数据与新数据之间执行lerp插值(见同文件forEachTween方法)。这意味着它的工作方式与AnimatedContainer完全一致:你不需要手动启动任何动画控制器,只要改变LineChartData中的任意值,图表就会自动从旧状态过渡到新状态。
控制动画的 duration 与 curve
动画的时长与缓动曲线通过两个可选属性控制(示例来自 handle_animations.md):
LineChart( duration: Duration(milliseconds: 150), curve: Curves.linear, LineChartData( isShowingMainData ? sampleData1() : sampleData2(), ), )duration:过渡动画时长,默认值为Duration(milliseconds: 150)(见 line_chart.dart 的构造参数默认值);curve:缓动曲线,默认Curves.linear。
如何关闭动画
如果某些场景(如页面初始渲染、高频刷新)不需要动画,只需把duration设为Duration.zero:
LineChart( duration: Duration.zero, LineChartData( // 你的图表数据 ), )触摸交互:内置 Tooltip 与自定义回调
除了动画,README 引出的另一大能力是触摸交互,专题文档见 handle_touches.md。其交互流程为:渲染器捕获触摸事件并包装成FlTouchEvent→ 交给对应 Painter 计算命中的元素 → 返回具体的TouchResponse→ 调用数据类中提供的touchCallback。
内置触摸处理(handleBuiltInTouches)
在折线图、柱状图、散点图中,只要把handleBuiltInTouches设为true,库就会在触摸到的数据点上自动展示 Tooltip 气泡与指示器,你只需要配置其外观(示例来自 handle_touches.md):
LineChart( LineChartData( lineTouchData: LineTouchData( handleBuiltInTouches: true, touchTooltipData: LineTouchTooltipData( getTooltipColor: (touchedSpot) => Colors.blueGrey.withOpacity(0.8), // 更多外观配置 ), ), ), )在 line_chart.md 中可以看到LineTouchData的完整参数:touchSpotThreshold(触摸命中精度,默认 10)、touchCallback(事件回调)、longPressDuration(长按判定时长,默认取 Flutter 的kLongPressTimeout,即 500ms)等。
自定义触摸回调
若内置处理无法满足需求,可通过touchCallback自行接管(示例来自 handle_touches.md):
LineChart( LineChartData( lineTouchData: LineTouchData( touchCallback: (FlTouchEvent event, LineTouchResponse touchResponse) { if (event is FlTapUpEvent) { // 在这里处理点击事件 } }, ), ), )从源码看,当handleBuiltInTouches为true时,line_chart.dart 的_handleBuiltInTouch会先调用你提供的_providedTouchCallback,再内部更新 tooltip 与指示器状态,因此自定义回调与内置 Tooltip 可以同时生效,互不冲突。
亲自体验与进阶路径
在线体验示例应用
README.md 的 "Try it out" 章节提供了官方示例应用的体验入口:Google Play、App Store 以及 Web 版本(app.flchart.dev)。本地运行同样简单——示例应用就是仓库根目录下的example/Flutter 工程,直接在该目录执行flutter run即可在桌面、移动端或 Web 上浏览全部 Sample。
继续深入阅读
按 index.md 的导航,进一步学习建议如下:
- 各图表专项文档:line_chart.md、bar_chart.md、pie_chart.md、scatter_chart.md、radar_chart.md、candlestick_chart.md、gauge_chart.md;
- 公共配置详解:base_chart.md(边框、标题、网格、坐标点、线段样式等);
- 专题指南:handle_touches.md(触摸)、handle_animations.md(动画)、handle_transformations.md(缩放平移变换);
- 版本迁移:若从旧版本升级,务必查阅 迁移指南;
- 测试参考:仓库在 test/ 下为每种图表提供了
*_data_test.dart、*_painter_test.dart、*_renderer_test.dart等完整测试用例,阅读这些测试也是理解各参数边界行为的可靠途径。
结语
FL Chart 的设计哲学可以概括为一句话:用最少的代码得到默认可用、改动数据即自动动画的图表,再用数据类上的丰富参数逐步逼近任何你想要的视觉与交互效果。本文从 README.md 出发,串联了 pubspec.yaml 的环境要求、lib/fl_chart.dart的公开 API、各图表文档的参数体系,以及LineChart源码中ImplicitlyAnimatedWidget与内置触摸处理的实现细节。下一步,建议你直接打开example/工程运行 Sample,并在修改LineChartData的过程中观察隐式动画与触摸反馈——这是理解该库最高效的方式。
【免费下载链接】fl_chart
FL Chart is a highly customizable Flutter chart library that supports Line Chart, Bar Chart, Pie Chart, Scatter Chart, Radar Chart and Candlestick Chart.
相关推荐
FL Chart完全指南:Flutter图表库的5大核心类型与实战应用
FL Chart完全指南:Flutter图表库的5大核心类型与实战应用 想要为你的Flutter应用添加专业的数据可视化功能吗?FL Chart作为Flutte
FL Chart自定义Painter深度解析:掌握Flutter图表绘制的终极指南
FL Chart自定义Painter深度解析:掌握Flutter图表绘制的终极指南 FL Chart是Flutter生态中最强大的图表绘制库之一,它通过灵活的自
Flutter图表库FL Chart项目推荐
Flutter图表库FL Chart项目推荐 一、项目基础介绍及主要编程语言 FL Chart是一个由Dart语言编写的开源项目,它为Flutter应用提供了一
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考