【发布时间】:2021-05-14 10:37:13
【问题描述】:
我正在尝试创建一个带有复杂的点击动作动画的小部件。为此,我有不同的控制器,例如首先动画到特定值,例如 onTapDown 上的 0.5,然后在 onTapUp 上转发到 1.0,但我还想添加控制器,它完全变为 1.0,持续时间不同和不同的逻辑。如果我只使用一个控制器,我可以使用AnimatedBuilder 自动设置状态,甚至可以在调用setState 的控制器更新函数上添加一个监听器。但据我所知,我不能用多个控制器来做到这一点,AnimatedBuilder 不能监听多个控制器,如果我为每个控制器添加一个监听器,当多个控制器时,setState 将在同一帧上被调用多次正在运行,我认为这会影响性能。
有没有办法解决这个问题?例如,有没有办法检查状态是否已经在特定帧中设置并避免为该控制器调用设置状态,以便每个控制器上的侦听器可以是这样的?
_controller.addListener((){
if( !stateUpdated (?) ) // I couldn't find something similar to this
setState(() {
});
});
【问题讨论】:
-
你可以覆盖你的小部件的
setState(),在里面你可以检查thungs是否已经改变,并基于你调用super.setState()。所以你可以更好地控制重建 -
您也可以查看
didUpdateWidget()Widget 类方法,看看您是否也可以使用它来确定您的小部件是否需要重建 -
“据我所知,AnimatedBuilder 不能监听多个控制器” - 然后使用
Listenable.merge,同时多次调用setState我们非常便宜它只设置一个标志 - github.com/flutter/flutter/blob/cc9b78fc5c/packages/flutter/lib/…