大家好,我有个问题,我不明白AnimatedWidget
和AnimatedBuilder
之间的区别。源代码中的注释如下:
动画小工具:
/// For more complex case involving additional state, consider using
/// [AnimatedBuilder].
动画生成器:
/// For simple cases without additional state, consider using
/// [AnimatedWidget].
我想知道如何在它们之间进行选择,因为我不太了解文档,谢谢!
除了使用它所需的语法之外,它们之间没有真正的区别。
需要明确的是,这是AnimatedBuilder
:的代码
class AnimatedBuilder extends AnimatedWidget {
const AnimatedBuilder({
Key key,
@required Listenable animation,
@required this.builder,
this.child,
}) : assert(builder != null),
super(key: key, listenable: animation);
final TransitionBuilder builder;
final Widget child;
@override
Widget build(BuildContext context) {
return builder(context, child);
}
}
是的,什么都不做
从这段代码中我们可以清楚地看到,AnimatedBuilder
只是使用AnimatedWidget
的不同语法。由于AnimatedBuilder
是将所有布局逻辑委托给回调的AnimatedWidget
所以最后,这真的取决于你。两者都做同样的事情。使用使更可读的内容
animatedWidget和animatedBuilder都执行与动画相关的相同工作。
在继续之前,你必须知道,要创建动画,我们必须至少需要两件事1。动画本身和2。我们将在其上应用动画的小部件。
两者之间的清晰切割差异为:
-
AnimatedWidget仅将动画作为参数,而AnimatedBuilder将两个参数"child"one_answers"animation"作为参数。
-
AnimatedWidget被实现为一个扩展AnimationdWidget的类。例如
类abc扩展了AnimatedWidget
而AnimatedBuilder是作为类内的小部件实现的。例如
child:动画生成器(…..(,
现在,虽然两者都做相同的工作,但都有不同的方法。在AnimatedWidget中,它有自己的子级,所以我们必须只传递动画。在AnimatedBuilder中,我们需要传递子级和动画。
以AnimatedWidget为例,u可以对任意数量的具有不同值的动画使用相同的AnimatedWidget类。
现在你会想,如果AnimatedWidget能够做到我们为什么需要AnimationdBuilder?
答案是简单的
在AnimatedWidget中更改动画需要更改渲染徽标或我们的孩子的小部件。因此,AnimatedBuilder所做的是为提供一个选择,即显式传递您选择的子项和动画。