问题描述
我的CustomPainter窗口小部件有问题。我想绘制一个可以正常工作的PieChart,然后添加一个Variable,将Chart绘制到该变量,直到达到该角度为止。现在,我要对其进行动画处理,我使用了Future.delayed函数,并在其中使用setState来更新变量,但不幸的是,该方法无法正常工作。
也许我太愚蠢了,无法理解我在做错什么,无法找到正确的答案... 但是如果可以的话,您可以帮我的忙。
如果有所作为,我正在为网络开发。
感谢您的帮助!
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:stats/data/listLanguages.dart';
import 'painter/pieChartPainter.dart';
class Chart extends StatefulWidget {
ListLanguages listLanguages;
Chart({ListLanguages listLanguages}) {
if (listLanguages == null) {
listLanguages = new ListLanguages();
}
this.listLanguages = listLanguages;
}
@override
_ChartState createState() => _ChartState();
}
class _ChartState extends State<Chart> {
@override
Widget build(BuildContext context) {
List angles = widget.listLanguages.calcCounts();
int angle = 0;
Future.delayed(new Duration(seconds: 2),(){
setState(() {
angle = 360;
print("test");
});
});
return Column(
children: [
Spacer(flex: 2),Row(
children: [
Spacer(),CustomPaint(
size: Size.square(400),painter: PieChartPainter(
angles: angles,colors: new List()
..add(Colors.green)
..add(Colors.blue)
..add(Colors.brown)
..add(Colors.pink)
..add(Colors.orange)
..add(Colors.grey.shade700),angle: angle,),Spacer(flex: 10),],Spacer(flex: 3),);
}
}
import 'package:flutter/material.dart';
import 'package:vector_math/vector_math.dart' as vm;
class PieChartPainter extends CustomPainter {
List angles,colors;
int angle;
PieChartPainter(
{@required List angles,@required List colors,int angle: 360}) {
this.angles = angles;
this.colors = colors;
this.angle = angle;
}
@override
void paint(Canvas canvas,Size size) {
Paint p = new Paint();
double start = -90;
double tmp = 0;
for (int i = 0; i < angles.length; i++) {
if (i < 5) {
p.color = colors[i];
} else {
p.color = colors[5];
}
if (tmp + angles[i] < angle) {
canvas.drawArc(Rect.fromLTRB(0,size.width,size.height),vm.radians(start),vm.radians(angles[i]),true,p);
start = start + angles[i];
tmp = tmp + angles[i];
} else {
double x = angle - tmp;
canvas.drawArc(Rect.fromLTRB(0,vm.radians(x),p);
return;
}
}
}
@override
bool shouldRepaint(CustomPainter oldDelegate) {
return true;
}
}
这是创建饼图所需的完整代码
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)