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
您测试过软件包吗?不,我正在寻找,我需要具有不同和特定图像的动画您测试过软件包吗?不,我正在寻找,我需要具有不同和特定图像的动画