【发布时间】:2019-12-29 04:58:53
【问题描述】:
CustomPainter 类似乎有几种触发重绘的方法。
我让我的画家使用 shouldRepaint 方法,但是,我希望我的画家对可侦听的更改做出反应,而不是轮询更改。
Flutter 文档指出
触发重绘的最有效方法是:
扩展该类并为 > CustomPainter 的构造函数提供一个重绘参数,该对象会在该对象重新绘制时通知其侦听器。 扩展 Listenable(例如通过 ChangeNotifier)并实现 CustomPainter,以便对象本身直接提供通知。
我已经尝试将可监听传递给自定义绘制器,但是当可监听更新时,不会按照文档中的说明调用绘制方法
在任何一种情况下,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 都会按照文档中的说明重新绘制自己。
【问题讨论】: