CustomPainter类似乎有几种触发重新绘制的方法。
我让我的画家使用shouldRepaint方法工作,但是,我希望我的画家以可听的方式对更改做出反应,而不是轮询更改。
Flutter文档指出
触发重绘的最有效方法是:
扩展此类,并为CustomPainter的构造函数提供一个重绘参数,该对象在需要重绘时通知其侦听器。 扩展Listenable(例如,通过ChangeNotifier)并实现CustomPainter,以便对象本身直接提供通知。
我尝试过将侦听器传递给Custom Painter,但是当侦听器更新时,未按照文档中的说明调用paint方法
无论哪种情况,只要动画滴答,CustomPaint小部件或RenderCustomPaint渲染对象都将侦听Listenable并重新绘制
class CursorPainter extends CustomPainter {
Listenable _repaint;
Player player;
BuildContext context;
// Pass in repaint (listenable)
CursorPainter({repaint, this.context}) {
_repaint = repaint;
player = Provider.of<Player>(context, listen: false);
}
@override
void paint(Canvas canvas, Size size) {
// Paint logic...
}
@override
bool shouldRepaint(CursorPainter lastTrackPainter) {
// Tried returning both true and false here to no avail. Method is continually called.
}
}
我希望每次可监听对象发生更改并调用notifyListeners()时,CustomPainter都会按照文档中的说明重新绘制自身。
答案 0 :(得分:1)
在构造函数中,调用super
,...
CursorPainter({repaint, this.context}) {
super(repaint: repaint);
_repaint = repaint;
player = Provider.of<Player>(context, listen: false);
}