Flutter 如何创建动画表情雨与颤振?
我需要的动画是由颤振创建的。 谢谢查看以下内容:Flutter 如何创建动画表情雨与颤振?,flutter,dart,flutter-animation,Flutter,Dart,Flutter Animation,我需要的动画是由颤振创建的。 谢谢查看以下内容: import 'dart:math'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; class Homer extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( body:
import 'dart:math';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class Homer extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: View(
numberOfItems: 100,
),
);
}
}
class Item {
static final random = Random();
double _size;
Color _color;
Alignment _alignment;
Item() {
_color = Color.fromARGB(random.nextInt(255), random.nextInt(255),
random.nextInt(255), random.nextInt(255));
_alignment =
Alignment(random.nextDouble() * 2 - 1, random.nextDouble() * 2 - 1);
_size = random.nextDouble() * 40 + 1;
}
}
class View extends StatefulWidget {
final int numberOfItems;
const View({Key key, this.numberOfItems}) : super(key: key);
@override
_ViewState createState() => _ViewState();
}
class _ViewState extends State<View> with SingleTickerProviderStateMixin {
var items = <Item>[];
var started = false;
AnimationController animationController;
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: Stack(
children: <Widget>[
Scaffold(
appBar: AppBar(
title: Text("Emoji Example Rain"),
),
body: Center(
child: RaisedButton(
child: Text("Start Dropping"),
onPressed: makeItems,
),
),
),
...buildItems()
],
),
),
);
}
List<Widget> buildItems() {
return items.map((item) {
var tween = Tween<Offset>(
begin: Offset(0, Random().nextDouble() * -1 - 1),
end: Offset(Random().nextDouble() * 0.5, 2))
.chain(CurveTween(curve: Curves.linear));
return SlideTransition(
position: animationController.drive(tween),
child: AnimatedAlign(
alignment: item._alignment,
duration: Duration(seconds: 10),
child: AnimatedContainer(
duration: Duration(seconds: 10),
width: item._size,
height: item._size,
decoration:
BoxDecoration(color: item._color, shape: BoxShape.circle),
),
),
);
}).toList();
}
@override
void initState() {
super.initState();
animationController =
AnimationController(vsync: this, duration: Duration(seconds: 10));
}
void makeItems() {
setState(() {
items.clear();
for (int i = 0; i < widget.numberOfItems; i++) {
items.add(Item());
}
});
animationController.reset();
animationController.forward();
}
}
import'dart:math';
进口“包装:颤振/cupertino.dart”;
进口“包装:颤振/材料.省道”;
类Homer扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:视图(
项目数量:100,
),
);
}
}
类项目{
静态最终随机=随机();
双倍大小;
颜色(颜色),;
对齐(u对齐);;
项目({
_color=color.fromARGB(random.nextInt(255),random.nextInt(255),
random.nextInt(255),random.nextInt(255));
_对齐=
对齐(random.nextDouble()*2-1,random.nextDouble()*2-1);
_大小=随机.nextDouble()*40+1;
}
}
类视图扩展了StatefulWidget{
最终整数项目;
const视图({Key-Key,this.numberOfItems}):super(Key:Key);
@凌驾
_ViewState createState();
}
类_ViewState使用SingleTickerProviderStateMixin扩展状态{
var项目=[];
var=false;
动画控制器;
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:安全区(
子:堆栈(
儿童:[
脚手架(
appBar:appBar(
标题:文本(“表情符号示例雨”),
),
正文:中(
孩子:升起按钮(
子项:文本(“开始删除”),
onPressed:makeItems,
),
),
),
…buildItems()
],
),
),
);
}
列出buildItems(){
返回items.map((item){
变量tween=tween(
开始:偏移量(0,Random().nextDouble()*-1-1),
结束:偏移量(随机().nextDouble()*0.5,2))
.链(曲线之间的曲线(曲线:曲线.线性));
返回幻灯片转换(
位置:animationController.drive(tween),
孩子:动画片(
对齐:项目。\u对齐,
持续时间:持续时间(秒数:10),
子:动画容器(
持续时间:持续时间(秒数:10),
宽度:项目。\u尺寸,
高度:项目。_尺寸,
装饰:
盒子装饰(颜色:项目._颜色,形状:盒子形状.圆圈),
),
),
);
}).toList();
}
@凌驾
void initState(){
super.initState();
动画控制器=
AnimationController(vsync:this,duration:duration(秒:10));
}
void makeItems(){
设置状态(){
items.clear();
对于(int i=0;i
查看以下内容:
import 'dart:math';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class Homer extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: View(
numberOfItems: 100,
),
);
}
}
class Item {
static final random = Random();
double _size;
Color _color;
Alignment _alignment;
Item() {
_color = Color.fromARGB(random.nextInt(255), random.nextInt(255),
random.nextInt(255), random.nextInt(255));
_alignment =
Alignment(random.nextDouble() * 2 - 1, random.nextDouble() * 2 - 1);
_size = random.nextDouble() * 40 + 1;
}
}
class View extends StatefulWidget {
final int numberOfItems;
const View({Key key, this.numberOfItems}) : super(key: key);
@override
_ViewState createState() => _ViewState();
}
class _ViewState extends State<View> with SingleTickerProviderStateMixin {
var items = <Item>[];
var started = false;
AnimationController animationController;
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: Stack(
children: <Widget>[
Scaffold(
appBar: AppBar(
title: Text("Emoji Example Rain"),
),
body: Center(
child: RaisedButton(
child: Text("Start Dropping"),
onPressed: makeItems,
),
),
),
...buildItems()
],
),
),
);
}
List<Widget> buildItems() {
return items.map((item) {
var tween = Tween<Offset>(
begin: Offset(0, Random().nextDouble() * -1 - 1),
end: Offset(Random().nextDouble() * 0.5, 2))
.chain(CurveTween(curve: Curves.linear));
return SlideTransition(
position: animationController.drive(tween),
child: AnimatedAlign(
alignment: item._alignment,
duration: Duration(seconds: 10),
child: AnimatedContainer(
duration: Duration(seconds: 10),
width: item._size,
height: item._size,
decoration:
BoxDecoration(color: item._color, shape: BoxShape.circle),
),
),
);
}).toList();
}
@override
void initState() {
super.initState();
animationController =
AnimationController(vsync: this, duration: Duration(seconds: 10));
}
void makeItems() {
setState(() {
items.clear();
for (int i = 0; i < widget.numberOfItems; i++) {
items.add(Item());
}
});
animationController.reset();
animationController.forward();
}
}
import'dart:math';
进口“包装:颤振/cupertino.dart”;
进口“包装:颤振/材料.省道”;
类Homer扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:视图(
项目数量:100,
),
);
}
}
类项目{
静态最终随机=随机();
双倍大小;
颜色(颜色),;
对齐(u对齐);;
项目({
_color=color.fromARGB(random.nextInt(255),random.nextInt(255),
random.nextInt(255),random.nextInt(255));
_对齐=
对齐(random.nextDouble()*2-1,random.nextDouble()*2-1);
_大小=随机.nextDouble()*40+1;
}
}
类视图扩展了StatefulWidget{
最终整数项目;
const视图({Key-Key,this.numberOfItems}):super(Key:Key);
@凌驾
_ViewState createState();
}
类_ViewState使用SingleTickerProviderStateMixin扩展状态{
var项目=[];
var=false;
动画控制器;
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:安全区(
子:堆栈(
儿童:[
脚手架(
appBar:appBar(
标题:文本(“表情符号示例雨”),
),
正文:中(
孩子:升起按钮(
子项:文本(“开始删除”),
onPressed:makeItems,
),
),
),
…buildItems()
],
),
),
);
}
列出buildItems(){
返回items.map((item){
变量tween=tween(
开始:偏移量(0,Random().nextDouble()*-1-1),
结束:偏移量(随机().nextDouble()*0.5,2))
.链(曲线之间的曲线(曲线:曲线.线性));
返回幻灯片转换(
位置:animationController.drive(tween),
孩子:动画片(
对齐:项目。\u对齐,
持续时间:持续时间(秒数:10),
子:动画容器(
持续时间:持续时间(秒数:10),
宽度:项目。\u尺寸,
高度:项目。_尺寸,
装饰:
盒子装饰(颜色:项目._颜色,形状:盒子形状.圆圈),
),
),
);
}).toList();
}
@凌驾
void initState(){
super.initState();
动画控制器=
AnimationController(vsync:this,duration:duration(秒:10));
}
void makeItems(){
设置状态(){
items.clear();
对于(int i=0;i
您测试过软件包吗?不,我正在寻找,我需要具有不同和特定图像的动画您测试过软件包吗?不,我正在寻找,我需要具有不同和特定图像的动画