我无法让自定义画笔进行重新绘制。我尝试使用Listenable、回调函数、setState等方法,但屏幕上没有任何重绘。
文档中提到:
触发重绘的最有效方式是:
- 通过扩展CustomPainter类并在其构造函数中提供repaint参数,在需要重绘时通知其侦听器对象。
- 通过扩展Listenable(例如通过ChangeNotifier)和实现CustomPainter,使对象直接提供通知。 在任一情况下,CustomPaint widget或RenderCustomPaint渲染对象将侦听Listenable,并在动画滴答时重绘,避免了管道的构建和布局阶段。
但代码并未按预期工作。
这是我使用的代码:
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
main() {
runApp(MaterialApp(
home: Scaffold(appBar: AppBar(), body: Pad()),
));
}
class Pad extends StatefulWidget {
@override
_PadState createState() => _PadState();
}
class _PadState extends State<Pad> {
@override
Widget build(BuildContext context) {
final painter = Painter();
return GestureDetector(
onTap: () {
setState(() {
painter.addY(10);
});
},
child: CustomPaint(
painter: painter,
child: Container(),
));
}
}
class Painter extends CustomPainter {
double y = 10;
addY(val) {
y += val;
}
@override
void paint(Canvas canvas, Size size) {
canvas.drawCircle(Offset(size.width / 2, y++), 100, Paint());
}
@override
bool shouldRepaint(Painter oldDelegate) {
return true;
}
}