Flutter 饼图从顶部开始
Flutter pie chart starting at top
我想创建一个饼图(或者更确切地说是环形图)来显示给定值(比如 1000 欧元)已经用完了多少。我尝试了包 pie_chart and fl_chart,虽然它们都绘制了漂亮的图表,但我无法按照我想要的方式显示它。
到目前为止,我从这两个包中得到的是,较小的部分从环上的任何地方开始:
我希望它看起来像这样,较小的部分从顶部开始并根据可用资金的用量顺时针填充 space,类似于进度指示器:
我试过旋转图表,但旋转的角度总是取决于space小部分占了多少,我不知道如何计算。
progress indicator包非常灵活,可以解决你的问题
要根据百分比选择不同的颜色,您可以使用这种方法:
final double _profilePercentage = 0.25;
Color getProfileStatusColor() {
switch ((_profilePercentage * 100).toInt()) {
case 100:
return kSuccessColor;
case 75:
return kSuccessColor;
case 50:
return kAccentColor;
case 25:
return kErrorColor;
default:
return kGreyColor;
}
}
其中,小部件看起来像这样:
LinearPercentIndicator(
width: MediaQuery.of(context).size.width * 0.85 -
60.0,
animation: true,
lineHeight: 7.0,
animationDuration: 500,
percent: _profilePercentage,
linearStrokeCap: LinearStrokeCap.roundAll,
progressColor: getProfileStatusColor(),
),
我在这里找到了解决方案:
他们使用带有多个 CircularProgressIndicator 的堆栈来实现此目的,但也应该可以使用 CircularPercentIndicator(您必须将背景颜色设置为透明才能看到后面的元素)
在我的例子中,startDegreeoffset 解决了问题
child: Stack(
children: [
PieChart(
PieChartData(
startDegreeOffset: 270,
borderData: FlBorderData(show: false),
sectionsSpace: 0,
centerSpaceRadius: EFRDimen.dimen64,
sections: getSections(),
),
),
Center(
child: Text(
'someString',
style: const TextStyle(
fontFamily: "ScreenSans",
fontSize: Dimen.fontSize14,
color: FRColor.textGray,
),
),
),
],
),
我想创建一个饼图(或者更确切地说是环形图)来显示给定值(比如 1000 欧元)已经用完了多少。我尝试了包 pie_chart and fl_chart,虽然它们都绘制了漂亮的图表,但我无法按照我想要的方式显示它。 到目前为止,我从这两个包中得到的是,较小的部分从环上的任何地方开始:
我希望它看起来像这样,较小的部分从顶部开始并根据可用资金的用量顺时针填充 space,类似于进度指示器:
我试过旋转图表,但旋转的角度总是取决于space小部分占了多少,我不知道如何计算。
progress indicator包非常灵活,可以解决你的问题
要根据百分比选择不同的颜色,您可以使用这种方法:
final double _profilePercentage = 0.25;
Color getProfileStatusColor() {
switch ((_profilePercentage * 100).toInt()) {
case 100:
return kSuccessColor;
case 75:
return kSuccessColor;
case 50:
return kAccentColor;
case 25:
return kErrorColor;
default:
return kGreyColor;
}
}
其中,小部件看起来像这样:
LinearPercentIndicator(
width: MediaQuery.of(context).size.width * 0.85 -
60.0,
animation: true,
lineHeight: 7.0,
animationDuration: 500,
percent: _profilePercentage,
linearStrokeCap: LinearStrokeCap.roundAll,
progressColor: getProfileStatusColor(),
),
我在这里找到了解决方案:
在我的例子中,startDegreeoffset 解决了问题
child: Stack(
children: [
PieChart(
PieChartData(
startDegreeOffset: 270,
borderData: FlBorderData(show: false),
sectionsSpace: 0,
centerSpaceRadius: EFRDimen.dimen64,
sections: getSections(),
),
),
Center(
child: Text(
'someString',
style: const TextStyle(
fontFamily: "ScreenSans",
fontSize: Dimen.fontSize14,
color: FRColor.textGray,
),
),
),
],
),