背景
公司最近引入了 Flutter 技术栈,Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。然而由于 Flutter 还在早期发展阶段没有,生态建设还不够完善。比如项目中需要用到图表 UI 组件,经过一番调研,Google/charts 功能最强大,样式最丰富(详见 online gallery),于是引入到项目中。但是 charts 只实现了直线折线图,所以只能 fork charts 项目自己实现平滑曲线效果。
基础使用
- Goole/charts 这个图表库很强大,但是文档不太友好,只有 online gallery 上有纯示例代码,几乎没有 Api 说明。
- 可行性分析的 Demo 效果
- 仔细研究优化后的效果
- 具体使用代码及注释
return Container(
height: 150.0,
child: charts.LineChart(
_createChartData(), // 折线图的点的数据列表
animate: true, // 动画
defaultRenderer: charts.LineRendererConfig( // 折线图绘制的配置
includeArea: true,
includePoints: true,
includeLine: true,
stacked: false,
),
domainAxis: charts.NumericAxisSpec( // 主轴的配置
tickFormatterSpec: DomainFormatterSpec(widget.dateRange), // tick 值的格式化,这里把 num 转换成 String
renderSpec: charts.SmallTickRendererSpec( // 主轴绘制的配置
tickLengthPx: 0, // 刻度标识突出的长度
labelOffsetFromAxisPx: 12, // 刻度文字距离轴线的位移
labelStyle: charts.TextStyleSpec( // 刻度文字的样式
color: ChartUtil.getChartColor(HColors.lightGrey),
fontSize: HFontSizes.smaller.toInt(),
),
axisLineStyle: charts.LineStyleSpec( // 轴线的样式
color: ChartUtil.getChartColor(ChartUtil.lightBlue),
),
),
tickProviderSpec: charts.BasicNumericTickProviderSpec( // 轴线刻度配置
dataIsInWholeNumbers: false,
desiredTickCount: widget.data.length, // 期望显示几个刻度
),
),
primaryMeasureAxis: charts.NumericAxisSpec( // 交叉轴的配置,参数参考主轴配置
showAxisLine: false, // 显示轴线
tickFormatterSpec: MeasureFormatterSpec(),
tickProviderSpec: charts.BasicNumericTickProviderSpec(
dataIsInWholeNumbers: false,
desiredTickCount: 4,
),
renderSpec: charts.GridlineRendererSpec( // 交叉轴刻度水平线
tickLengthPx: 0,
labelOffsetFromAxisPx: 12,
labelStyle: charts.TextStyleSpec(
color: ChartUtil.getChartColor(HColors.lightGrey),
fontSize: HFontSizes.smaller.toInt(),
),
lineStyle: charts.LineStyleSpec(
color: ChartUtil.getChartColor(ChartUtil.lightBlue),
),
axisLineStyle: charts.LineStyleSpec(
color: ChartUtil.getChartColor(ChartUtil.lightBlue),
),
),
),
selectionModels: [ // 设置点击选中事件