在我看来,所有的动画都是不断地用一些经常改变的值来呈现小部件,例如,时钟上旋转的指针有一个叫做"Angular "的值来指示它的位置。在Flutter中,似乎StatefulWidget就足够了,我的问题是:
StatefulWidget
AnimatedBuilder
AnimatedWidget
cpjpxq1n1#
我假设AnimationBuilder是AnimatedBuilder,因为Flutter SDK中没有AnimationBuilder这样的类。
AnimationBuilder
除了类名和参数外,没有其他差异。
在Flutter中,StatefulWidget似乎就足够了。你说得对。AnimatedBuilder/AnimatedWidget具有哪些功能?
setState
ListenableBuilder
build
话虽如此,让我们看看代码:
builder: (...) { }
animation
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. */; }, ), ); }
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和状态小部件有什么区别?正如我所说的,没有语义或实际的区别。AnimatedWidget和AnimatedBuilder只是StatefulWidget的抽象。
1条答案
按热度按时间cpjpxq1n1#
我假设
AnimationBuilder
是AnimatedBuilder
,因为Flutter SDK中没有AnimationBuilder
这样的类。简短回答
除了类名和参数外,没有其他差异。
长答案
在Flutter中,StatefulWidget似乎就足够了。
你说得对。
AnimatedBuilder
/AnimatedWidget
具有哪些功能?AnimatedWidget
:flutter/lib/src/widgets/transitions. dart只是一个StatefulWidget,它接受一个列表项,并在列表项通知更改时触发setState
。AnimatedBuilder
:flutter/lib/src/widgets/transitions. dart是ListenableBuilder
的子类,ListenableBuilder
是AnimatedWidget
(!)的子类,唯一的区别是AnimatedBuilder
使用您的回调作为AnimatedWidget
的build
方法。话虽如此,让我们看看代码:
AnimatedBuilder
只是一个使用回调函数(builder: (...) { }
)作为构建方法的StatefulWidget
,它还在Listenable(animation
)每次通知更改时触发setState
。AnimatedWidget
的等效代码为:AnimatedBuilder/AnimatedWidget和状态小部件有什么区别?
正如我所说的,没有语义或实际的区别。
AnimatedWidget
和AnimatedBuilder
只是StatefulWidget
的抽象。