Flutter怎么使用AnimatedBuilder实现动效复用
Flutter怎么使用AnimatedBuilder实现动效复用
这篇文章主要介绍“Flutter怎么使用AnimatedBuilder实现动效复用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Flutter怎么使用AnimatedBuilder实现动效复用”文章能帮助大家解决问题。
前言
我们之前讲述了动画构建的两种方式,Animation和AnimationWidget,这两种构建动画都是将组件和动画一起完成的。有些时候,我们只是想动效复用,而不关心组件构建,这个时候就可以使用AnimatedBuilder了。
AnimatedBuilder 介绍
根据官方文档说明,AnimatedBuilder的使用要点如下:
An
AnimatedBuilderunderstands how to render the transition. —— AnimatedBuilder 知道如何渲染转场动效。An
AnimatedBuilderdoesn’t know how to render the widget, nor does it manage theAnimationobject. ——AnimatedBuilder不知道(或者准确说不应)如何渲染组件,也不管理组件对象。Use
AnimatedBuilderto describe an animation as part of a build method for another widget. If you simply want to define a widget with a reusable animation, use anAnimatedWidget. —— 使用AnimatedBuilder作为其他组件的动效描述。如果只是想复用一个带有动效的组件,那么应该使用AnimatedWidget。这个可以看我们之前关于 AnimatedWidget 的介绍:Flutter 入门与实战(九十四):让你的组件拥有三维动效Examples of AnimatedBuilders in the Flutter API:
BottomSheet,ExpansionTile,PopupMenu,ProgressIndicator,RefreshIndicator,Scaffold,SnackBar,TabBar,TextField. —— 在 Flutter 中,有很多组件使用 AnimatedBuilder 构建动效。
这段话的核心要点就是AnimatedBuilder应该只负责动画效果的管理,而不应该管理组件构建。如果混在一起使用,就失去设计者的初衷了。这就好比我们的状态管理和界面一样,一个负责业务逻辑,一个负责界面渲染,从而实现解耦和复用。这个AnimatedBuilder就是专门复制动效管理的,并且应当努力实现复用。AnimatedBuilder的定义如下:
constAnimatedBuilder({Key?key,requiredListenableanimation,requiredthis.builder,this.child,}):assert(animation!=null),assert(builder!=null),super(key:key,listenable:animation);
其中关键的参数是builder,builder用于构建组件的转变动作,在builder里可以对要渲染的子组件进行转变操作,然后返回变换后的组件。builder的定义如下,其中child实际就是AnimatedBuilder的child参数,可以根据需要是否使用。
WidgetFunction(BuildContextcontext,Widget?child)
Transform 组件介绍
在 Flutter 中,提供了一个专门用于对子组件进行转换操作的,定义如下:
constTransform({Key?key,requiredthis.transform,this.origin,this.alignment,this.transformHitTests=true,Widget?child,}):assert(transform!=null),super(key:key,child:child);
这里的参数说明如下:
transform是一个Matrix4对象,用于定义三维空间的变换操作。origin是一个坐标偏移量,实际会加入到Matrix4的translation(平移)中。alignment:即转变进行的参考方位。child:被转换的子组件。
我们可以通过Transform,实现AnimatedBuilder的动效管理,也就是在AnimatedBuilder中,通过构建Transform对象实现动效。
应用
基本概念讲清楚了(敲黑板:很多时候大家都是直接简单看一下文档就开始用,甚至干脆复制示例代码就上,结果很可能会用得不对),可以开始撸代码了。我们来实现下面的动效。
这里其实是两个组件,通过AnimatedBuilder做了动效转换。在动效的一半时间是文字“点击按钮变出小姐姐”,之后的一半将组件更换为了小姐姐的图片了。使用AnimatedBuilder的实现代码如下:
classRotationSwitchAnimatedBuilderextendsStatelessWidget{finalWidgetchild1,child2;finalAnimation
注意第2个组件多转了180度,是未来保证停止后正好旋转360度,以免图片倒过来。另外就是这里的child1和child2也可以修改为使用WidgetBuilder函数来在需要的时候再构建组件。使用这个RotationSwitchAnimatedBuilder的组件就十分简单了,将需要操作的两个组件作为参数传过来,然后控制Animation对象来刷新界面就好了,对应的代码如下:
classAnimatedBuilderDemoextendsStatefulWidget{constAnimatedBuilderDemo({Key?key}):super(key:key);@override_AnimatedBuilderDemoStatecreateState()=>_AnimatedBuilderDemoState();}class_AnimatedBuilderDemoStateextendsState
复用的话也很容易了,比如我们将一个圆形和一个矩形组件传过去,一样可以复用这个动画效果。
关于“Flutter怎么使用AnimatedBuilder实现动效复用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注恰卡编程网行业资讯频道,小编每天都会为大家更新不同的知识点。
推荐阅读
-
Flutter实现文字镂空效果的详细步骤
-
flutter怎么封装点击菜单工具栏组件checkBox多选版
flutter怎么封装点击菜单工具栏组件checkBox多选版这篇...
-
flutter怎么封装单选点击菜单工具栏组件
flutter怎么封装单选点击菜单工具栏组件这篇“flutter怎...
-
Android与Flutter之间如何实现通信
Android与Flutter之间如何实现通信这篇“Android...
-
怎么在Flutter中获取设备标识符
怎么在Flutter中获取设备标识符这篇文章主要介绍了怎么在Flu...
-
Flutter怎么使用RepositoryProvider解决跨组件传值问题
Flutter怎么使用RepositoryProvider解决跨组件传值问题...
-
Flutter如何实现文本滚动高亮效果
Flutter如何实现文本滚动高亮效果这篇文章主要介绍“Flutt...
-
怎么用web3dart为flutter应用生成以太坊地址
怎么用web3dart为flutter应用生成以太坊地址本篇内容介...
-
Flutter多平台适配机制的示例分析
-
flutter是什么
