AnimatedWidget and AnimatedBuilder in Flutter



大家好,我有个问题,我不明白AnimatedWidgetAnimatedBuilder之间的区别。源代码中的注释如下:

动画小工具:

/// 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

所以最后,这真的取决于你。两者都做同样的事情。使用使更可读的内容

animatedWidgetanimatedBuilder都执行与动画相关的相同工作。

在继续之前,你必须知道,要创建动画,我们必须至少需要两件事1。动画本身和2。我们将在其上应用动画的小部件。

两者之间的清晰切割差异为:

  • AnimatedWidget仅将动画作为参数,而AnimatedBuilder将两个参数"child"one_answers"animation"作为参数。

  • AnimatedWidget被实现为一个扩展AnimationdWidget的类。例如

类abc扩展了AnimatedWidget

AnimatedBuilder是作为类内的小部件实现的。例如

child:动画生成器(…..(,

现在,虽然两者都做相同的工作,但都有不同的方法。在AnimatedWidget中,它有自己的子级,所以我们必须只传递动画。在AnimatedBuilder中,我们需要传递子级和动画。

AnimatedWidget为例,u可以对任意数量的具有不同值的动画使用相同的AnimatedWidget类。

现在你会想,如果AnimatedWidget能够做到我们为什么需要AnimationdBuilder

答案是简单的

AnimatedWidget中更改动画需要更改渲染徽标或我们的孩子的小部件。因此,AnimatedBuilder所做的是为提供一个选择,即显式传递您选择的子项和动画。

最新更新