动画生成器和状态小部件在Flutter?中的区别

toe95027  于 2023-02-09  发布在  Flutter
关注(0)|答案(1)|浏览(95)

在我看来,所有的动画都是不断地用一些经常改变的值来呈现小部件,例如,时钟上旋转的指针有一个叫做"Angular "的值来指示它的位置。
在Flutter中,似乎StatefulWidget就足够了,我的问题是:

cpjpxq1n

cpjpxq1n1#

我假设AnimationBuilderAnimatedBuilder,因为Flutter SDK中没有AnimationBuilder这样的类。

简短回答

除了类名和参数外,没有其他差异。

长答案

在Flutter中,StatefulWidget似乎就足够了。
你说得对。
AnimatedBuilder/AnimatedWidget具有哪些功能?

    • 没有什么特别的,它们是仅用于 Package 通用/样板代码的类**,请参见:
  • AnimatedWidget:flutter/lib/src/widgets/transitions. dart只是一个StatefulWidget,它接受一个列表项,并在列表项通知更改时触发setState
  • AnimatedBuilder:flutter/lib/src/widgets/transitions. dart是ListenableBuilder的子类,ListenableBuilderAnimatedWidget(!)的子类,唯一的区别是AnimatedBuilder使用您的回调作为AnimatedWidgetbuild方法。

话虽如此,让我们看看代码:

  • AnimatedBuilder只是一个使用回调函数(builder: (...) { })作为构建方法的StatefulWidget,它还在Listenable(animation)每次通知更改时触发setState
Widget build(BuildContext context) {
  return Center( // The [Center] widget instance will not rebuild.
    child: AnimatedBuilder(
      animation: animation,
      builder: (context, child) {
        return /* Widge tree that will rebuild when [animation] changes. */;
      },
    ),
  );
}
  • 使用AnimatedWidget的等效代码为:
Widget build(BuildContext context) {
  return Center( // The [Center] widget instance will not rebuild.
    child: MyAnimatedWidget(animation: animation),
  );
}

// ...

class MyAnimatedWidget extends AnimatedWidget {
  const MyAnimatedWidget({required Listenable animation}) : super(listenable: animation);

  Widget build(BuildContext context) {
    return /* Widge tree that will rebuild when [animation] changes. */;
  }
}

AnimatedBuilder/AnimatedWidget和状态小部件有什么区别?
正如我所说的,没有语义或实际的区别。AnimatedWidgetAnimatedBuilder只是StatefulWidget抽象

相关问题