Flutter 中的 AnimatedWidget 和 AnimatedBuilder

Liu*_*ong 4 flutter flutter-animation

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

动画小部件:

/// For more complex case involving additional state, consider using
/// [AnimatedBuilder].
Run Code Online (Sandbox Code Playgroud)

动画生成器:

/// For simple cases without additional state, consider using
/// [AnimatedWidget].
Run Code Online (Sandbox Code Playgroud)

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

Rém*_*let 6

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

需要明确的是,这是以下代码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);
  }
}
Run Code Online (Sandbox Code Playgroud)

...是的,什么都不做

从这段代码我们可以清楚地看到,这AnimatedBuilder只是 using 的不同语法AnimatedWidget。因为AnimatedBuilderAnimatedWidget将所有布局逻辑委托给回调

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

  • @JonahWilliams 所有`XTransition` 小部件,例如 [`AlignTransition`](https://docs.flutter.io/flutter/widgets/AlignTransition-class.html) 都遵循以下模式: AnimatedWidget 以孩子为参数 (3认同)
  • 但是你也可以用`AnimatedWidget`来做到这一点。没有什么可以阻止您将“孩子”存储到您班级的字段中 (2认同)

归档时间:

查看次数:

2641 次

最近记录:

5 年,10 月 前