最近在学习使用flutter开发app,因为是公司项目中使用到的技术,边学习,边投入到实际开发中,把本身使用到和学到的组件记录下来,总结一下,以便回顾。html
要实现折线图效果,查阅资料,发现了charts_flutter,最新的版本号在这里查看: pub.dev: charts_flutter ,可是,正以下面这位网友说的:git
Goole/charts 这个图表库很强大,可是文档不太友好,只有 online gallery 上有纯示例代码,几乎没有 Api 说明。
没有什么文档,只能本身看示例作,还好 有这个: flutter使用charts库定义图表 简单使用 ,差很少能当文档用。
接下来废话很少说,上代码。github
实现一个图表中显示两条折线带图例折线图样式:app
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<ChartPage> { // 折线图 Widget _chartWidget() { 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<charts.Series<SeriesDatas, int>> seriesList = [ new charts.Series<SeriesDatas, int>( id: 'line1', colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, domainFn: (SeriesDatas sales, _) => sales.time, measureFn: (SeriesDatas sales, _) => sales.data, data: serial1data, ), new charts.Series<SeriesDatas, int>( 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'; }, ), ], ); return new Card( child: Container( padding: new EdgeInsets.fromLTRB(16, 10, 16, 20), margin: new EdgeInsets.only(bottom: 20), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[ new Center( child: new Text( 'xxxx (折线图)', style: TextStyle( color: Color.fromRGBO(0, 0, 0, 1.0), //opacity:不透明度 fontFamily: 'PingFangBold', fontSize: 15.0, ), ), ), new Padding( padding: new EdgeInsets.all(32.0), child: new SizedBox( height: 200.0, child: chart, ), ) ], ), ), ); } @override Widget build(BuildContext context) { return new Scaffold( body: new Center( child: _chartWidget(), ), ); } }
效果图是开发过程当中的真机屏幕截图less
charts flutter gallery
Simple Line Chart Example
Date Time Line Point Combo Chart Exampledom
flutter使用charts库定义图表 简单使用
flutter 数据可视化——折线图
Flutter 实现平滑曲线折线图ssh