gpt4 book ai didi

Flutter - 重启倒计时定时器

转载 作者:行者123 更新时间:2023-12-03 23:36:07 25 4
gpt4 key购买 nike

我有一个倒数计时器(5 分钟)。我需要一些东西来重新开始倒计时并从头开始。

我尝试更改倒计时变量的状态,但不起作用,停止并从最后一个计数器重新启动。

我的代码:

import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:quiver/async.dart';

class ProgressIndicatorDemo extends StatefulWidget {
@override
_ProgressIndicatorDemoState createState() =>
new _ProgressIndicatorDemoState();
}

class _ProgressIndicatorDemoState extends State<ProgressIndicatorDemo>
with SingleTickerProviderStateMixin {
AnimationController controller;
Animation<double> animation;
var countdown;
int actual;

@override
void initState() {
super.initState();
animationStart();
startTimer();
}

@override
void dispose() {
controller.dispose();
super.dispose();
}

void animationStart() {
controller =
AnimationController(duration: Duration(minutes: 5), vsync: this);
animation = Tween(begin: 0.0, end: 1.0).animate(controller)
..addListener(() {
setState(() {});
});
controller.forward();
}

void startTimer() {
CountdownTimer countDownTimer = new CountdownTimer(
new Duration(minutes: 5),
new Duration(seconds: 1),
);

countdown = countDownTimer.listen(null);
countdown.onData((duration) {
setState(() {
actual = 300 - duration.elapsed.inSeconds;
});
});

countdown.onDone(() {
countdown.cancel();
});
}

@override
Widget build(BuildContext context) {
return new Center(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
animation.value != 1.0
? CircularProgressIndicator(
semanticsLabel:
(animation.value * 100.0).toStringAsFixed(1).toString() +
'%',
semanticsValue:
(animation.value * 100.0).toStringAsFixed(1).toString() +
'%',
backgroundColor: Colors.black.withOpacity(0.25),
valueColor:
new AlwaysStoppedAnimation<Color>(Colors.green[700]),
value: animation.value)
: Icon(Icons.info_outline),
actual != null
? Text(
"Tiempo:" +
DateFormat.ms()
.format(DateTime.fromMillisecondsSinceEpoch(
actual * 1000))
.toString(),
textAlign: TextAlign.center,
)
: Container(),
FlatButton(
child: Text('Reset ' + actual.toString()), onPressed: () {}),
],
),
);
}
}

所以问题是:我怎样才能从开始倒计时重新开始?

最佳答案

您可以使用 RestartableTimer 来使用更清洁的解决方案

import 'package:async/async.dart';

RestartableTimer _timer = new RestartableTimer(_timerDuration, _startNewPage);


然后,您只需调用 _timer.reset(); 即可重新开始倒计时。

希望能帮助到你。

关于Flutter - 重启倒计时定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56465770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com