您当前的位置:首页 >> 家居资讯

Flutter比如说 | 显式动画组件

2023-03-05 12:16:16

nDemo,

),

),

);

}

}

classAnimationDemoextendsStatefulWidget{

@override

_AnimationDemoState createState=> _AnimationDemoState;

}

class_AnimationDemoStateextendsState< AnimationDemo>

withSingleTickerProviderStateMixin{

late AnimationController _controller;

@override

voidinitState{

_controller = AnimationController(

duration: Duration(seconds: 1),

vsync: this,

)..repeat;

super.initState;

}

@override

voiddispose{

_controller.dispose;

super.dispose;

}

@override

Widget build(BuildContext context){

returnRotationTransition(

turns: _controller,

child: FlutterLogo(size: 80),

);

}

}

上述code首先通过SingleTickerProviderStateMixin 获取ticker,并下定义了一个AnimationController且在initState初始化时将其动画化时长设立为1s,最后通过调用repeat方式使其周而复始放映,运行时均可推论到其姪基本FlutterLogo周而复始轴向为的动画化功效,如上图12-2所示。

■ 上图12‑2适用RotationTransition借助于轴向为功效

除了repeat(周而复始放映)外,动画化依靠器还支持forward(正序放映一次)、reverse(倒序放映一次)、stop(原地停止)、reset(移走)、animateTo(动画化至某个系将近后再进一步停下)等方式。

2

FadeTransition

这是一个专责转为变不可见度的显式动画化基本,可以算作隐式动画化AnimatedOpacity基本的显式动画化版,因此它可以被动画化依靠器加载,随时停止等。该基本专有名词与12.2.1节的RotationTransition大同小异,通过opacity模板发送到不可见度系将近,code如下:

FadeTransition(

opacity: _controller,

child: FlutterLogo,

)

例如可提均需一些按住让用户手动依靠动画化的进展,功效如上图12-3所示。

■ 上图12‑3适用FadeTransition手动依靠不可见度动画化

用作借助于上图12-3所示功效的清晰code如下:

//第12章/fade_transition_demo.dart

import'package:flutter/material.dart';

voidmain{

runApp(MyApp);

}

classMyAppextendsStatelessWidget{

@override

Widget build(BuildContext context){

returnMaterialApp(

home: Scaffold(

appBar: AppBar(title: Text( "FadeTransition Demo")),

body: Center(

child: AnimationDemo,

),

),

);

}

}

classAnimationDemoextendsStatefulWidget{

@override

_AnimationDemoState createState=> _AnimationDemoState;

}

class_AnimationDemoStateextendsState< AnimationDemo>

withSingleTickerProviderStateMixin{

late AnimationController _controller;

@override

voidinitState{

_controller = AnimationController(

duration: Duration(seconds: 1),

vsync: this,

);

super.initState;

}

@override

voiddispose{

_controller.dispose;

super.dispose;

}

@override

Widget build(BuildContext context){

returnRow(

mainAxisAlignment: MainAxisAlignment.spaceEvenly,

children: [

FadeTransition(

opacity: _controller,

child: FlutterLogo(size: 80),

),

ElevatedButton(

child: Text( "开始"),

onPressed: => _controller.repeat(reverse: true),

),

ElevatedButton(

child: Text( "停止"),

onPressed: => _controller.stop,

),

],

);

}

}

除此以外,上例的开始按住调用_controller.repeat方式时风行了reverse: true模板,该模板的作用是每当动画化依靠器放映完结(系将近为1.0)时,倒序放映一遍,再进一步周而复始黄金时段。换言之,当没有风行该模板时,动画化依靠器选项的周而复始放映是从0.0交替至1.0,然后瞬间移走至0.0,再进一步周而复始放映,而设立reverse后,周而复始放映的道德上不会改以从0.0交替至1.0,再进一步从1.0交替至0.0,借以周而复始放映。

3

ScaleTransition

这是一个可以缩放姪基本的显式动画化基本,专有名词与其他显式动画化基本更加加相似,不同点在于它能够通过scale模板发送到缩放倍将近,code如下:

ScaleTransition(

scale: _controller,

child: FlutterLogo,

)

例如当scale为2.0时,姪基本不会被放大为原本的2倍,而当scale为0.5时,则姪基本就不会被缩小为原本的一半。

4

SizeTransition

这是一个引导ClipRect 对姪基本跨度完成打印的显式动画化基本,运行时通过sizeFactor要素系将近决定对姪基本的打印道德上,code如下:

SizeTransition(

sizeFactor: _controller,

child: FlutterLogo,

)

例如当sizeFactor的系将近从1.0交替至0.0时,可推论到姪基本逐渐被打印至实质上消失的功效,如上图12-4所示。该基本选项道德上是沿度角方向里心打印,如有必要,也可通过风行axis: Axis.horizontal改以沿水平方向打印,或通过axisAlignment要素转为变打印的对齐方式。

■ 上图12‑4适用SizeTransition对姪基本完成打印动画化

12.2.3节讲解的ScaleTransition的内部是通过Transform 基本对姪基本碎裂,从而在绘制时超越缩放的功效,而这里的SizeTransition则是通过直接转为变自身跨度,并配合ClipRect对姪基本打印,在布局时超越能够的动画化功效,然而在Flutter布局里,基本的跨度必须考虑到父级强制执行,因此拦截机里要注意该基本的父级强制执行不说是紧强制执行,否则无法推论到动画化功效。对基本强制执行等概念不感兴趣的听众可参考资料本书第6章“进阶布局”里关于“强制执行”的内容可,对Transform 碎裂或ClipRect打印等内容可不感兴趣的听众可查看本书第14章“过场与特效”里对这2个基本的讲解。

5

SideTransition

这是一个专责标量的显式动画化基本,适用时需通过position 要素风行一个Animation Offset 对此侧向持续性,通常引导Tween借助于,code如下:

SlideTransition(

position: Tween(

begin: Offset( 0, 0),

end: Offset( 0.5, -1.2),

).animate(_controller),

child: FlutterLogo( size: 100),

)

上述code通过Tween的begin模板将动画化起始右边下定义为Offset(0,0),又通过end模板将完结右边下定义为Offset(0.5, -1.2)。这些系将近是指比起于该基本的跨度,即应由初始右边偏移的比例,因此动画化起始的(0,0)就对此原地不动,而完结右边的(0.5, -1.2)理论上对此的是向后静止0.5倍于整个姪基本的跨度,并侧向静止1.2倍于姪基本的高度。若姪基本的跨度为100×100一个单位,则理论上动画化时长内基本不会向后标量50一个单位,并同时侧向标量120一个单位。

6

PositionedTransition

这个PositionedTransition是隐式动画化AnimatedPositioned基本的显式动画化版,因此这2个基本都与第1章讲解的普通Positioned基本一样,可在Stack里适用,code如下:

Stack(

children: [

PositionedTransition(

rect: RelativeRectTween(

begin: RelativeRect.fromLTRB( 0, 0, 200, 200),

end: RelativeRect.fromLTRB( 100, 100, 0, 0),

).animate(_controller),

child: FlutterLogo( size: 100),

),

],

)

这里除此以外,该基本的rect模板能够的类型为Animation RelativeRect ,可由动画化依靠器接在RelativeRectTween获取。通过RelativeRect.fromLTRB构造函将近,自由软件可同时指定left、top、right、bottom 这4个方向的系将近,专有名词与Positioned基本的同名模板更加加值得注意。

7

DecoratedBoxTransition

这个基本是普通DecoratedBox 的显式动画化版,需由decoration 模板发送到类型为Animation Decoration 的系将近,一般由DecorationTween提均需,code如下:

DecoratedBoxTransition(

decoration: DecorationTween(

begin: BoxDecoration(

color: Colors.grey,

borderRadius: BorderRadius.circular( 50.0),

),

end: BoxDecoration(

color: Colors.black,

borderRadius: BorderRadius.zero,

),

).animate(_controller),

child: FlutterLogo( size: 100),

)

运行时该基本不会由黑色的圆形室内装饰,交替至紫色的矩形室内装饰,如上图12-5所示。

■ 上图12‑5适用DecoratedBoxTransition对姪基本完成打印动画化

这个基本看似没有相异的隐式动画化基本,但其实第7章讲解的AnimatedContainer基本就支持decoration要素,也不会在decoration系将近改变时系统会接踵而来隐式动画化功效,可实质上当作该基本的隐式动画化版。对DecoratedBox基本或BoxDecoration类不感兴趣的听众可参考资料本书第14章“过场与特效”里的就其内容可。

8

AnimatedIcon

AnimatedIcon顾名思义,是一个用作提均需动画化徽标的基本。它的拼法虽然是以Animated...标题的,但它其实是一个显式动画化基本,能够通过progress要素风行动画化依靠器,另外还能够由icon要素风行动画化徽标将近据,code如下:

AnimatedIcon(

progress: _controller,

icon: AnimatedIcons.arrow_menu,

)

■ 上图12‑6AnimatedIcon之arrow_menu的动画化功效

上图12-7列出了目前Flutter外置的14种动画化徽标,以及它们相异的英文名称,均需听众参考资料。

■ 上图12‑7Flutter外置的14种动画化徽标及英文名称

03

参考资料读物

《Flutter 基本成文与拦截机》

ISBN:978-7-302-59420-8

[加] 王浩然(Bradley Wang) 撰写

定价:109元

04

难忘推荐

账号小程序游戏开发│猜倍将近迷你游戏(于其源码+录像带)

Flink程序语言系统化│Scala程序语言初级概念化

Flink程序语言系统化│FlinkCEP程序语言概念化

Flink程序语言系统化│DataStream API程序语言概念化

Flink程序语言系统化│DataSet API程序语言概念化

将近 据分析拦截机│客户价系将近分析

统计分析拦截机│商品价格得出结论关键时刻

统计分析拦截机│时间氨基酸得出结论

统计分析拦截机│KaggleTitanic生存得出结论

天津妇科医院预约挂号
武汉看癫痫去哪家医院
江西男科去哪看
广东妇科病治疗费用
福州哪家医院治疗早泄阳痿最好
友情链接