如何解决如何在颤动中停止动画持续时间?
我这里有一个关于递减计时器的代码。我想在 5 秒后或在某个时间停止计时器。如何使用颤振实现这一目标?这是一个示例代码。
class MyHomePage1 extends StatefulWidget {
MyHomePage1({Key key,this.title}) : super(key: key);
final String title;
@override
_MyHomePage1State createState() => _MyHomePage1State();
}
class _MyHomePage1State extends State<MyHomePage1> with TickerProviderStateMixin {
int _counter = 0;
AnimationController _controller;
int levelClock = 180;
void _incrementCounter() {
setState(() {
_counter++;
});
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
void initState() {
super.initState();
_controller = AnimationController(vsync: this,duration: Duration(seconds: levelClock) // gameData.levelClock is a user entered number elsewhere in the applciation
);
_controller.forward();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),),body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[
Countdown(
animation: StepTween(
begin: levelClock,// THIS IS A USER ENTERED NUMBER
end: 0,).animate(_controller),Text(
'You have pushed the button this many times:',Text(
'$_counter',style: Theme.of(context).textTheme.headline4,],floatingActionButton: FloatingActionButton(
onpressed: _incrementCounter,tooltip: 'Increment',child: Icon(Icons.add),);
}
}
class Countdown extends AnimatedWidget {
Countdown({Key key,this.animation}) : super(key: key,listenable: animation);
final Animation<int> animation;
@override
build(BuildContext context) {
Duration clockTimer = Duration(seconds: animation.value);
String timerText = '${clockTimer.inMinutes.remainder(60).toString()}:${clockTimer.inSeconds.remainder(60).toString().padLeft(2,'0')}';
return Column(
children: [
Text(
"$timerText",style: TextStyle(
fontSize: 110,color: Theme.of(context).primaryColor,);
}
}
解决方法
实现此目的的一种方法是向动画添加侦听器,就像这样。
Countdown(
animation: StepTween(
begin: levelClock,end: 0,).animate(_controller)
..addListener(() {
if (_controller.value > (4 / levelClock)) { //4 = to stop after 5 seconds
_controller.stop();
}
}),),
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。