Flutter畫出漂亮的折線圖,餅圖
- 1.匯入依賴
- 2.折線圖
- 1.一條折線圖
- 1.效果圖
- 2.主要代碼
- 3.代碼決議
- 2.多條折線圖
1.匯入依賴
fl_chart: ^0.12.2
如果你想進一步了解這個插件的話,可以去看一下它的原始碼,框架地址
關于如何匯入依賴步驟如圖所示:
pubspec.yaml檔案->在dependencies下面添加依賴->點擊pub get

2.折線圖
1.一條折線圖
1.效果圖

2.主要代碼
import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/material.dart';
void main(){
runApp(
MaterialApp(home: LineChartSample2(),)
);
}
class LineChartSample2 extends StatefulWidget {
@override
_LineChartSample2State createState() => _LineChartSample2State();
}
class _LineChartSample2State extends State<LineChartSample2> {
List<Color> gradientColors = [
const Color(0xff23b6e6),
const Color(0xff02d39a),
];
@override
Widget build(BuildContext context) {
return Center(
child: Stack(
children: <Widget>[
Container(
decoration: const BoxDecoration(
borderRadius: BorderRadius.all(
Radius.circular(18),
),
color: Color(0xff232d37)),
child: Padding(
padding: const EdgeInsets.only(right: 12.0, left: 12.0, top: 24, bottom: 12),
child: LineChart(
mainData(),
),
),
),
Positioned(
top: 5,
left: 5,
child: Text(
'訪問量',
style: TextStyle(
fontSize: 12, color: Colors.white,decoration: TextDecoration.none),
),
)
],
),
);
}
LineChartData mainData() {
return LineChartData(
gridData: FlGridData(
show: true,
drawVerticalLine: true,
getDrawingHorizontalLine: (value) {
return FlLine(
color: const Color(0xff37434d),
strokeWidth: 1,
);
},
getDrawingVerticalLine: (value) {
return FlLine(
color: const Color(0xff37434d),
strokeWidth: 1,
);
},
),
titlesData: FlTitlesData(
show: true,
bottomTitles: SideTitles(
showTitles: true,
reservedSize: 22,
getTextStyles: (value) =>
const TextStyle(color: Color(0xff68737d), fontWeight: FontWeight.bold, fontSize: 16),
getTitles: (value) {
if(value.toInt()%2==0){
return value.toInt().toString()+'月';
}
return '';
},
margin: 8,
),
leftTitles: SideTitles(
showTitles: true,
getTextStyles: (value) => const TextStyle(
color: Color(0xff67727d),
fontWeight: FontWeight.bold,
fontSize: 15,
),
getTitles: (value) {
switch (value.toInt()) {
case 1:
return '10k';
case 3:
return '30k';
case 5:
return '50k';
}
return '';
},
reservedSize: 28,
margin: 12,
),
),
borderData:
FlBorderData(show: true, border: Border.all(color: const Color(0xff37434d), width: 1)),
minX: 0,
maxX: 11,
minY: 0,
maxY: 6,
lineBarsData:linesBarData1(),
);
}
List<LineChartBarData> linesBarData1() {
final LineChartBarData lineChartBarData1 = LineChartBarData(
spots: [
FlSpot(0, 3),
FlSpot(2.6, 2),
FlSpot(4.9, 5),
FlSpot(6.8, 3.1),
FlSpot(8, 4),
FlSpot(9.5, 3),
FlSpot(11, 4),
],
isCurved: true,
colors: gradientColors,
barWidth: 5,
isStrokeCapRound: true,
dotData: FlDotData(
show: false,
),
belowBarData: BarAreaData(
show: true,
colors: gradientColors.map((color) => color.withOpacity(0.3)).toList(),
),
);
return [lineChartBarData1];
}
}
3.代碼決議
LineChartData的屬性:
| 屬性 | 功能 |
|---|---|
| gridData | 網格線的自定義(下面對gridData屬性的詳細解釋) |
| titlesData | 自定義x,y軸的坐標的標題(下面有對titlesData屬性的詳細解釋) |
| borderData | FlBorderData來設定邊框的大小和顏色 |
| minX | x軸的起點 |
| maxX | x軸的終點 |
| minY | y軸的起點 |
| maxY | y軸的終點 |
| lineBarsData | 通過LineChartBarData對折線進行自定義 |
gridData的屬性:
| 屬性 | 功能 |
|---|---|
| show | 是否顯示網格線 |
| drawVerticalLine | 是否顯示垂直方向的網格線 |
| getDrawingHorizontalLine | 通過FlLine來自定義水平方向線的顏色、大小等 |
| getDrawingVerticalLine | 通過FlLine來自定義垂直方向線的顏色、大小等 |
titilesData的屬性:
| 屬性 | 功能 |
|---|---|
| show | 是否顯示x,y軸的坐標的標題 |
| bottomTitles | 定義X軸的標題 |
| leftTitles | 定義y軸的標題 |
LineChartBarData的屬性:
| 屬性 | 功能 |
|---|---|
| spots | 設定各點的橫縱坐標 |
| isCurved | 是否線繪制成曲線 |
| colors | 曲線的顏色 |
| barWidth | 曲線的粗細 |
| isStrokeCapRound | 確定線帽的形狀 |
| dotData | 顯示結點 |
| belowBarData | 折線圖向下填滿的顏色 |
2.多條折線圖
效果如圖所示:

實作起來比較簡單,代碼如下:
List<LineChartBarData> linesBarData1() {
final LineChartBarData lineChartBarData1 = LineChartBarData(
spots: [
FlSpot(0, 3),
FlSpot(2.6, 2),
FlSpot(4.9, 5),
FlSpot(6.8, 3.1),
FlSpot(8, 4),
FlSpot(9.5, 3),
FlSpot(11, 4),
],
isCurved: true,
colors: gradientColors,
barWidth: 5,
isStrokeCapRound: true,
dotData: FlDotData(
show: false,
),
belowBarData: BarAreaData(
show: true,
colors: gradientColors.map((color) => color.withOpacity(0.3)).toList(),
),
);
final LineChartBarData lineChartBarData2 = LineChartBarData(
spots: [
FlSpot(0, 1),
FlSpot(2.6, 2.8),
FlSpot(4.9, 1.2),
FlSpot(6.8, 2.8),
FlSpot(8, 2.6),
FlSpot(9.5, 3.9),
FlSpot(11, 3),
],
isCurved: true,
colors: [
const Color(0xffaa4cfc),
],
barWidth: 5,
isStrokeCapRound: true,
dotData: FlDotData(
show: false,
),
belowBarData: BarAreaData(show: true,
colors: gradientColors.map((color) => color.withOpacity(0.3)).toList(),
),
);
return [lineChartBarData1,lineChartBarData2];
就是在原來的基礎上,多添加一個LineChartBarData曲線,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/259003.html
標籤:區塊鏈
上一篇:ChainLink原理
