【发布时间】:2020-01-23 19:42:27
【问题描述】:
我有以下代码动画任何widget
import 'dart:async';
import 'package:flutter/material.dart';
class AnimElasticOut extends StatefulWidget {
final Widget child;
final int delay;
final Key key;
final startAnimation;
AnimElasticOut(
{@required this.key,
@required this.child,
this.delay,
this.startAnimation});
@override
AnimElasticOutState createState() => AnimElasticOutState();
}
class AnimElasticOutState extends State<AnimElasticOut>
with TickerProviderStateMixin {
AnimationController controller;
Animation<double> animation;
int duration = 1000;
@override
void initState() {
super.initState();
controller = AnimationController(
vsync: this, duration: Duration(milliseconds: duration));
animation = CurvedAnimation(
parent: controller,
curve: Curves.elasticOut,
);
if (widget.startAnimation != null) {
if (widget.delay == null) {
controller.forward();
} else {
Timer(Duration(milliseconds: widget.delay), () {
controller.forward();
});
}
}
}
@override
void dispose() {
super.dispose();
controller.dispose();
}
@override
Widget build(BuildContext context) {
return ScaleTransition(
child: widget.child,
scale: animation,
);
}
}
示例用法
AnimElasticOut(
key: counterElasticOutKey,
child: Container(
height: 35,
padding: EdgeInsets.only(
left: 5, top: 5, bottom: 5, right: 15),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(20),
),
child: Row(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Icon(
Icons.add_alarm,
color: Colors.amber,
),
SizedBox(
width: 10,
),
Counter(
key: counterKey,
),
],
),
),
),
我使用以下代码开始动画。
counterElasticOutKey.currentState.controller.forward(from: 0);
现在它可以很好地为小部件设置动画。
我还有另一个代码可以反转动画。
counterElasticOutKey.currentState.controller.reverse();
我想要的是在倒车时使用另一个动画。此外,还有一些其他的持续时间。
比如我想要Curves.easeInOutCubic作为动画曲线,持续时间为milliseconds: 500
我该怎么做?
【问题讨论】:
-
谢谢。直到现在才知道
reverseDuration。但是我怎样才能反向使用任何其他动画呢? -
通过调用
reverse()方法,您的动画将下降(接近零值) -
是的。但是我需要在倒车时使用另一条动画曲线。默认情况下,我设置了
Curves.elasticOut曲线动画。我想在倒车时使用Curves.easeInOutCubic