import 'package:flutter/material.dart';
import 'dart:io';
import 'dart:async'; main() => runApp(MyApp()); class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
initialRoute: '/slide',
routes: {
'/': (context) => GamePage(),
'/builderAnimation': (context) => BuilderPage(),
'/crossfade': (context) => CrossFadePage(),
'/autofade': (context) => AutoFade(),
'/positiontransition': (context) => PositionTransition(),
'/rotateTransition': (context) => RotateTransition(),
'/scaleTransit': (context) => ScaleTest(),
'/slide': (context) => SlideTest(),
},
);
}
} ////////////////////////////////////////////////////////////////////////////////////////////////
class SlideTest extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return SlideTestState();
}
} class SlideTestState extends State<SlideTest> with SingleTickerProviderStateMixin{
@override
Widget build(BuildContext context) { var t = Tween(begin: Offset(0.0,2.0), end: Offset(0.0,1.0)).animate(AnimationController(vsync: this, duration: Duration(seconds: 2))..forward()); return Scaffold(
appBar: AppBar(title: Text('slide'),),
body: Container(
child: SlideTransition(
child: Container(width: 100,height: 100,color: Colors.orange,),
position: t),
),
);
}
} //////////////////////////////////////////////////////////////////////////////////////////////// class ScaleTest extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return ScaleTransitionState();
}
} class ScaleTransitionState extends State<ScaleTest> with SingleTickerProviderStateMixin{
@override
Widget build(BuildContext context) { Animation t = Tween(begin: 1.0, end: 0.0).animate(AnimationController(vsync: this,duration: Duration(seconds: 2))..forward()); return Scaffold(
appBar: AppBar(title: Text('scale'),),
body: Container(
child: ScaleTransition(
child: Container(width: 100,height: 100,color: Colors.orange,),
scale: t,), ),
);
}
} ////////////////////////////////////////////////////////////////////////////////////////////////
class RotateTransition extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return RotateTransitionState();
}
} class RotateTransitionState extends State<RotateTransition> with SingleTickerProviderStateMixin{
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('rotate'),),
body: Container(
child: RotationTransition(
child: Container(width: 100, height: 100, color: Colors.orange,),
turns: AnimationController(vsync: this,
duration: Duration(seconds: 1),lowerBound: 0, upperBound: 0.1)..forward(), ),
),
);
}
} ////////////////////////////////////////////////////////////////////////////////////////////////
class PositionTransition extends StatefulWidget {
@override
State<StatefulWidget> createState() {
// TODO: implement createState
return PositionTransitionState();
}
} class PositionTransitionState extends State<PositionTransition> with SingleTickerProviderStateMixin { @override
Widget build(BuildContext context) { Animatable animatable = RelativeRectTween(begin: RelativeRect.fromLTRB(75, 75, 75, 75),
end: RelativeRect.fromLTRB(100, 100, 75, 75),);
Animation frontRelativeRect = animatable.animate(AnimationController(vsync: this, duration: Duration(seconds: 2))..repeat()); return Scaffold(
appBar: AppBar(title: Text('position transition'),),
body: Container(
child: Stack(
alignment: Alignment.center,
fit: StackFit.loose,
children: <Widget>[
Container(width: 200,height: 200,color: Colors.blue,),
Container(width: 100,height: 100,color: Colors.red,),
PositionedTransition(
rect: frontRelativeRect,
child: Container(width: 100,height: 100, color: Colors.orange,),
),
],
),
),
);
}
} //////////////////////////////////////////////////////////////////////////////////////////////// class AutoFade extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return AutoFadeState();
}
} class AutoFadeState extends State<AutoFade> with SingleTickerProviderStateMixin {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('fade'),),
body: Container(
child: FadeTransition(
opacity: AnimationController(
vsync: this,
duration: Duration(seconds: 1),
)..repeat(),
child: Text(('testing auto fade')),
alwaysIncludeSemantics: true,
),
),
);
}
} ////////////////////////////////////////////////////////////////////////////////////////////////
class CrossFadePage extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return CrossFadePageState();
}
} class CrossFadePageState extends State<CrossFadePage> {
bool first = true; @override
Widget build(BuildContext context) {
Timer(Duration(seconds: 2), (){
setState(() {
first = !first;
});
});
return Scaffold(
appBar: AppBar(title: Text('fade'),),
body: AnimatedCrossFade(
firstChild: Text('first'),
secondChild: Text('second'),
crossFadeState: first?CrossFadeState.showFirst:CrossFadeState.showSecond,
duration: Duration(seconds: 1)),
);
}
}
////////////////////////////////////////////////////////////////////////////////////////////////
class BuilderPage extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return BuilderPageState();
}
} class BuilderPageState extends State<BuilderPage> with SingleTickerProviderStateMixin {
@override
Widget build(BuildContext context) {
var controller = AnimationController(duration: Duration(seconds: 2),vsync: this);
var tween = Tween(begin: 20.0, end: 100.0).animate(controller);
return Scaffold(
appBar: AppBar(title: Text('fade'),),
body: AnimatedBuilder(
animation: tween,
child:Text('${tween.value}'),
builder: (context, Widget child){
print(controller.value);
print(tween.value);
return Container(
child: Column(
children: <Widget>[
RaisedButton(child: Text('btn'),onPressed: (){
controller.forward();
},),
Text('${tween.value} from 2'),
child,
],
),
);
}),
);
}
} //////////////////////////////////////////////////////////////////////////////////////////////// class GamePage extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return GamePageState();
}
} class GamePageState extends State<GamePage> with TickerProviderStateMixin {
var gameWidth;
var gameHeight;
var brickSide;
List positionedWidgets = [<Widget>[], <Widget>[], <Widget>[], <Widget>[]];
var animation; AnimationController animationController; generatePositionList() {
var top = (gameHeight - gameWidth) / 2.0 + 10.0;
var left = 10.0;
int i = 1;
for (int y = 0; y < 4; y++) {
for (int x = 0; x < 4; x++) {
positionedWidgets[y].add(Brick(
id: i,
x: left + (1 + x * 2) * brickSide / 2.0,
y: top + (1 + y * 2) * brickSide / 2.0,
brickSide: brickSide,
value: x + y,
));
i++;
}
}
} @override
void initState() {
super.initState();
animationController = AnimationController(
vsync: this, duration: Duration(seconds: 1));
} @override
Widget build(BuildContext context) {
gameWidth = MediaQuery.of(context).size.width;
gameHeight = MediaQuery.of(context).size.height;
brickSide = (gameWidth - 80) / 4;
generatePositionList(); return SafeArea(
child: Scaffold(
body: Container(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Container(
child: Text(
'GAME 2048',
style: TextStyle(fontSize: 40),
),
), TouchArea(allBricks: positionedWidgets,), Container(
child: Text(
'SCORE:999',
style: TextStyle(fontSize: 20),
),
),
],
),
),
),
);
}
} class TouchArea extends StatefulWidget {
List allBricks;
TouchArea({this.allBricks}); @override
State<StatefulWidget> createState() {
return TouchAreaState();
}
} class TouchAreaState extends State<TouchArea> { @override
Widget build(BuildContext context) {
return GestureDetector(
child: Container(
margin:
EdgeInsets.only(left: 18, right: 18, top: 13, bottom: 13),
decoration: BoxDecoration(
border: Border.all(color: Colors.grey, width: 3.0),
),
alignment: Alignment.center,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: widget.allBricks[0],
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: widget.allBricks[1],
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: widget.allBricks[2],
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: widget.allBricks[3],
),
],
),
),
);
}
} class Brick extends StatefulWidget {
double x;
double y;
var brickSide;
int value;
int id; Brick({this.id, this.x, this.y, this.brickSide, this.value}); @override
State<StatefulWidget> createState() {
return BrickState();
}
} class BrickState extends State<Brick> {
@override
Widget build(BuildContext context) {
return Container(
margin: EdgeInsets.all(2.0),
alignment: Alignment.center,
color: Colors.greenAccent,
width: widget.brickSide,
height: widget.brickSide,
child: Text('${widget.value}'),
);
}
} //class BrickState extends State<Brick>{
// @override
// Widget build(BuildContext context) {
// return Positioned(
// left: widget.x-widget.brickSide/2.0,top: widget.y-widget.brickSide/2.0,width: widget.brickSide,height: widget.brickSide,
// child: Container(child: Text('${widget.value}'),),
// );
// }
//}

  

flutter 动画 practice的更多相关文章

  1. 转:Flutter动画二

    1. 介绍 本文会从代码层面去介绍Flutter动画,因此不会涉及到Flutter动画的具体使用. 1.1 Animation库 Flutter的animation库只依赖两个库,Dart库以及phy ...

  2. 转:Flutter动画一

    1. 动画介绍 动画对于App来说,非常的重要.很多App,正是因为有了动画,所以才会觉得炫酷.移动端的动画库有非常的多,例如iOS上的Pop.web端的animate.css.Android端的An ...

  3. Flutter 动画详解(一)

    本文主要介绍了动画的原理相关概念,对其他平台的动画做了一个简要的梳理,并简要的介绍了Flutter动画的一些知识. 1. 动画介绍 动画对于App来说,非常的重要.很多App,正是因为有了动画,所以才 ...

  4. 《Flutter 动画系列一》25种动画组件超全总结

    动画运行的原理 任何程序的动画原理都是一样的,即:视觉暂留,视觉暂留又叫视觉暂停,人眼在观察景物时,光信号传入大脑神经,需经过一段短暂的时间,光的作用结束后,视觉形象并不立即消失,这种残留的视觉称&q ...

  5. 《Flutter 动画系列》组合动画

    老孟导读:在前面的文章中介绍了 <Flutter 动画系列>25种动画组件超全总结 http://laomengit.com/flutter/module/animated_1/ < ...

  6. Flutter 动画使用

    旋转动画  透明度变换动画  在Android中,可以通过View.animate()对视图进行动画处理,那在Flutter中怎样才能对Widget进行处理 在Flutter中,可以通过动画库给wid ...

  7. Flutter 动画鼻祖之CustomPaint

    老孟导读:CustomPaint可以称之为动画鼻祖,它可以实现任何酷炫的动画和效果.CustomPaint本身没有动画属性,仅仅是绘制属性,一般情况下,CustomPaint会和动画控制配合使用,达到 ...

  8. flutter 动画双指放大图片

    class GridAnimation extends StatefulWidget { @override State<StatefulWidget> createState() { r ...

  9. flutter 动画

    AnimatedCrossFade AnimatedCrossFade让俩个子widget 交替淡入淡出. class AnimatedCrossFade1 extends StatefulWidge ...

随机推荐

  1. 第10组 Alpha冲刺(4/6)

    链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 小组内容 恩泽(组长) 过去两天完成了哪些任务 描述 学习调用中国天气网API,接近实现天气推送功能 对天气推送的形式进行讨论及重确 ...

  2. shell | crontab 定时任务

    crontab工具 linux下自带的定时任务执行器 常用命令:crontab -l //显示用户的crontab文件的内容crontab -e //编辑用户的crontab文件的内容crontab ...

  3. linux学习(2):linux服务器常用操作和命令

    linux服务器常用操作和命令 目录 1. 什么是linux服务器load average?2. 如何查看linux服务器负载3. 服务器负载高怎么办?4. 如何查看服务器内存使用率?5. 如何查看单 ...

  4. mariadb使用with子句重写SQL性能提升5倍

    几个月前,我们有个产品的开发反馈了个问题,说有个组织结构的查询很慢,几千行的复杂关联需要1秒钟,表示太慢了,原语句如下: SELECT org.org_id, org.dimension, org.o ...

  5. 【转】git branch 命令查看分支、删除远程分支、本地分支

    git branch 命令操作 1.查看本地分支 : git branch 前面带有*号的是当前分支 2 .删除本地分支: git branch -d [branchname] 提示删除了一个名为li ...

  6. MySql分区后创建索引加速单表查询和连表查询

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/konkon2012/article/de ...

  7. 2-5 【ngFor指令 事件的处理和样式绑定】顶部导航支持选中状态

    索引的获取 first和last是布尔类型的 奇数偶数 []方括号表示的是数据绑定 ()圆括号就是事件绑定 . 开始代码 我们要实现的功能是菜单点击后,就变色 这样我们就得到了索引. 新建一个clas ...

  8. 小数末尾是0的,不显示0,有值才显示 StringFormat

    JAVA public static void main(String[] args) { DecimalFormat df = new DecimalFormat("###.##" ...

  9. 基于EasyDSS流媒体RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器解决方案创建视频点播、短视频、视频资源库等视频播放系统

    需求背景 最近有很多用户咨询关于视频点播问题,主要需求集中在如何搭建属于自己的视频点播平台: 实现的功能可以大体归类为:对应自身拥有的视频文件,需要发布到一个网站,其他用户都可以实现点播观看. 针对于 ...

  10. 浏览器低延时播放监控摄像头RTSP海康大华硬盘录像机NVR视频(EasyNVR播放FLV视频流)

    背景描述 EasyNVR的使用者应该都是清楚的知道,EasyNVR一个强大的功能就是可以进行全平台的无插件直播.主要原因在于rtsp协议的视频流(默认是需要插件才可以播放的)经由EasyNVR处理后可 ...