4

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

动画小部件:

/// For more complex case involving additional state, consider using
/// [AnimatedBuilder].

动画生成器:

/// For simple cases without additional state, consider using
/// [AnimatedWidget].

我想知道如何在它们之间进行选择,因为我不太了解文档,谢谢!

4

2 回答 2

7

除了使用它所需的语法之外,它们之间没有真正的区别。

需要明确的是,这是以下代码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只是 using 的不同语法AnimatedWidget。因为AnimatedBuilderAnimatedWidget将所有布局逻辑委托给回调

所以最后,这真的取决于你。两者都做同样的事情。使用让你更易读的东西

于 2018-08-05T14:19:18.133 回答
2

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

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

之间的明确区别是:

  • AnimatedWidget只接受动画作为参数,而AnimatedBuilder接受两个参数“child”和“animation”。

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

abc 类扩展了 AnimatedWidget

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

孩子:AnimatedBuilder(.....),

现在,虽然两者都做同样的工作,但都有不同的做事方式。在 AnimatedWidget 中它有自己的孩子,所以我们只需要传递动画。而在AnimatedBuilder中,我们需要传递孩子和动画。

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

现在你会想,如果AnimatedWidget可以做我们为什么需要AnimatedBuilder的事情?

答案很简单

更改 AnimatedWidget 中的动画需要更改呈现徽标或我们的孩子的小部件。所以AnimatedBuilder所做的是提供一个选择,即明确地传递您选择的孩子和动画。

于 2020-01-09T11:21:48.690 回答