说点儿闲话
最近在学习使用flutter开发app,由于是公司项目中使用到的技术,边学习,边投入到实际开发中,把自己使用到和学到的组件记录下来,总结一下,以便回顾。
要实现折线图效果,查阅资料,发现了charts_flutter,最新的版本号在这里查看: pub.dev: charts_flutter ,但是,正如下面这位网友说的:
Goole/charts 这个图表库很强大,但是文档不太友好,只有 online gallery 上有纯示例代码,几乎没有 Api 说明。
没有什么文档,只能自己看示例做,还好 有这个: flutter使用charts库定义图表 简单使用 ,差不多能当文档用。
接下来废话不多说,上代码。
代码实现
实现一个图表中显示两条折线带图例折线图样式:
import 'package:flutter/material.dart';
import 'package:charts_flutter/flutter.dart' as charts;
void main() => runApp(new MyApp());
// 此处例子是从项目中抽象出来的简写例子,可能有误,但大致思路如此
// 后面的效果图是开发过程中的真机拍照,跟此处例子页面的效果可能不太相同
// 但是折线图效果就是如此,当然了实际项目中使用的数据是dio请求接口的数据
class Chart extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: '折线图',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: new ChartPage(),
);
}
}
class ChartPage extends StatefulWidget {
@override
_ChartPageState createState() => new _ChartPageState();
}
class SeriesDatas {
final int time;
final int data;
SeriesDatas(this.time, this.data);
}
class _ChartPageState extends State {
final serial1data = [
new SeriesDatas(1, 5),
new SeriesDatas(2, 25),
new SeriesDatas(3, 100),
new SeriesDatas(4, 75),
];
final serial2data = [
new SeriesDatas(1, 15),
new SeriesDatas(2, 125),
new SeriesDatas(3, 30),
new SeriesDatas(4, 175),
];
List> seriesList = [
new charts.Series(
id: 'line1',
colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault,
domainFn: (SeriesDatas sales, _) => sales.time,
measureFn: (SeriesDatas sales, _) => sales.data,
data: serial1data,
),
new charts.Series(
id: 'line2',
colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault,
domainFn: (SeriesDatas sales, _) => sales.time,
measureFn: (SeriesDatas sales, _) => sales.data,
data: serial2data,
)
];
var chart = new charts.LineChart(
seriesList,
animate: true,
behaviors: [
new charts.SeriesLegend(
// 图例位置 在左侧start 和右侧end
position: charts.BehaviorPosition.end,
// 图例条目 [horizontalFirst]设置为false,图例条目将首先作为新行而不是新列增长
horizontalFirst: false,
// 每个图例条目周围的填充Padding
cellPadding: new EdgeInsets.only(right: 4.0, bottom: 4.0),
// 显示度量
showMeasures: true,
// 度量格式
measureFormatter: (num value) {
return value == null ? '-' : '${value}k';
},
),
],
);
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text(widget.title),
),
body: new Center(
child: new Column(
children: [
new Padding(
padding: new EdgeInsets.all(32.0),
child: new SizedBox(
height: 200.0,
child: chart,
),
),
],
),
),
);
}
}
效果如图:
参考资料:
charts flutter gallery
Simple Line Chart Example
Date Time Line Point Combo Chart Example
flutter使用charts库定义图表 简单使用
flutter 数据可视化——折线图
Flutter 实现平滑曲线折线图