我正在尝试编写一个类FadePainter
,它使用自定义GLSL着色器扩展CustomPainter
。(间接)一个async
操作。我想在我的FadePainter
类中完成这个操作,因为我不想把它作为参数传递。我可以很容易地从我的构造函数触发load函数,但是我需要一些方法来触发一个重绘一旦它完成加载.这可以用可选的repaint
Listenable
参数为CustomPainter
.
然而,我找不到任何方法将Listenable
(如ChangeNotifier
)传递给super
构造函数,同时将其存储在FadePainter
类中,所以我实际上可以触发它。我想做的是这样的事情:
class FadePainter extends CustomPainter {
FadePainter() {
final repaint = ChangeNotifier();
loadShader(repaint); // Pass ChangeNotifier to loadShader, which can then use it to trigger repaint
super(repaint: repaint);
}
}
或者甚至:
class FadePainter extends CustomPainter {
final ChangeNotifier repaint = ChangeNotifier();
FadePainter() : super(repaint: repaint);
}
但这两个都不是有效的语法。第一个抱怨super()
不计算为函数(因为super
构造函数在Dart中不这样工作);第二个声明示例成员不能在构造函数中被访问。
有两个明显的替代方案,我都不喜欢:
- 我可以传递一个
ChangeNotifier
到FadePainter
构造函数。然而,这只需要在这种非常特定的情况下在内部使用。将它作为参数传递没有意义。 - 我可以实现
CustomPainter
并扩展ChangeNotifier
,但这增加了许多(看起来)不必要的样板文件。
我怎么才能让它工作?
1条答案
按热度按时间9w11ddsr1#
您可以将默认构造函数重定向到私有的中间构造函数,以便将
ChangeNotifier
绑定到构造函数参数: