仅在特定值上通知动画侦听器

Only Notify Animation listeners on Specific values

我有一个问题,一个 Animation 应该只更新整数 触发 太频繁了。

update() { // gets called for 0, 0.01, 0.02, .., 1.0, .. but should only get called on 0, 1, ...
  final integer = animation.value.toInt();
  renderHeavyAnimation(integer);
}

在这种情况下,只有当 animation.value 达到下一个整数时,才应调用 update。保存以前的数字然后只在达到新整数时才渲染对我来说不起作用,因为CustomPaint takes a Listenable,也就是animation,画家会清除canvas 关于 Listenable.

的过度更新

我也试过使用IntTween

animation = IntTween(begin: ...).animate(animationController);

然而,这个 animation 只会针对相同的整数值多次通知,这正是我之前的情况。

总结

我正在寻找一种方法,仅在 值更改(使用 IntTween)或更好时仅针对特定值通知动画的听众。

Listenables 不实现过滤事件。并不是说这是不可能的,而是会导致重新实现 Stream.

借此机会将您的 CustomPaint 转换为 RenderBoxCustomPaint 基本上是一个简化的 RenderBox,因此后者允许您做同样的事情,但更适合您的用例。


您的最终实现将取决于您如何使用 CustomPaint

例如,如果您不使用 child,您可能想要制作一个 LeafRenderObjectWidget,而如果您使用,您将需要一个 SingleChildRenderObjectWidget.