下面是一个使用fl_chart库创建饼图的简单示例:
```dart
import 'package:flutter/material.dart';
import 'package:fl_chart/fl_chart.dart';
class PieChartSample extends StatefulWidget {
@override
_PieChartSampleState createState() => _PieChartSampleState();
}
class _PieChartSampleState extends State<PieChartSample> {
int touchedIndex;
@override
Widget build(BuildContext context) {
return AspectRatio(
aspectRatio: 1,
child: PieChart(
PieChartData(
pieTouchData: PieTouchData(touchCallback: (pieTouchResponse) {
setState(() {
if (pieTouchResponse.touchInput is FlLongPressEnd ||
pieTouchResponse.touchInput is FlPanEnd) {
touchedIndex = -1;
} else {
touchedIndex = pieTouchResponse.touchedSectionIndex;
}
});
}),
borderData: FlBorderData(show: false),
sectionsSpace: 0,
centerSpaceRadius: 40,
sections: getSections(),
),
),
);
}
List<PieChartSectionData> getSections() {
return List.generate(4, (i) {
final isTouched = i == touchedIndex;
final double fontSize = isTouched ? 25 : 16;
final double radius = isTouched ? 60 : 50;
switch (i) {
case 0:
return PieChartSectionData(
color: Colors.red,
value: 40,
title: '40%',
radius: radius,
titleStyle: TextStyle(
fontSize: fontSize,
fontWeight: FontWeight.bold,
color: const Color(0xffffffff),
),
);
case 1:
return PieChartSectionData(
color: Colors.green,
value: 30,
title: '30%',
radius: radius,
titleStyle: TextStyle(
fontSize: fontSize,
fontWeight: FontWeight.bold,
color: const Color(0xffffffff),
),
);
case 2:
return PieChartSectionData(
color: Colors.blue,
value: 15,
title: '15%',
radius: radius,
titleStyle: TextStyle(
fontSize: fontSize,
fontWeight: FontWeight.bold,
color: const Color(0xffffffff),
),
);
case 3:
return PieChartSectionData(
color: Colors.yellow,
value: 15,
title: '15%',
radius: radius,
titleStyle: TextStyle(
fontSize: fontSize,
fontWeight: FontWeight.bold,
color: const Color(0xffffffff),
),
);
default:
return null;
}
});
}
}
```
在这个例子中,我们创建了一个PieChartSample类,它继承自StatefulWidget。在build()方法中,我们创建了一个AspectRatio小部件,它将PieChart小部件的宽高比设置为1:1。然后,我们创建了一个PieChart小部件,它接收一个PieChartData对象作为参数。PieChartData对象包含所有的饼图数据,包括饼图的颜色、半径、标题、值等。
在PieChartData对象中,我们使用了PieTouchData对象来处理用户的触摸事件。我们还使用了FlBorderData对象来隐藏边框,使用sectionsSpace属性来设置饼图部分之间的间距,使用centerSpaceRadius属性来设置中心空间的半径。
在getSections()函数中,我们生成了饼图的各个部分。每个部分都由一个PieChartSectionData对象表示,它包括颜色、半径、值、标题和标题样式等属性。我们返回一个包含所有部分的列表,然后将它们传递给PieChartData对象。
最后,我们在PieTouchData对象的touchCallback属性中处理触摸事件。如果用户停止触摸饼图,我们将touchedIndex设置为-1,否则,我们将touchedIndex设置为当前触摸部分的索引。根据touchedIndex的值,我们可以设置饼图部分的半径和标题样式,以突出显示当前触摸的部分。