Flutter倒计时/计时器的实现代码
作者:罗伊德的技术博客 发布时间:2023-07-01 03:50:50
标签:Flutter,倒计时,计时器
在我们实现某些功能时,可能会有倒计时的需求。
比如发送短信验证码,发送成功后可能要求用户一段时间内不能再次发送,这时候我们就需要进行倒计时,时间到了才允许再次操作。
如下图:
为了实现这样场景的需求,我们需要使用 Timer.periodic
。
一、引入Timer对应的库
import 'dart:async';
二、定义计时变量
class _LoginPageState extends State<LoginPage> {
...
Timer _timer;
int _countdownTime = 0;
...
}
三、点击后开始倒计时
这里我们点击 发送验证码
文字来举例说明。
GestureDetector(
onTap: () {
if (_countdownTime == 0 && validateMobile()) {
//Http请求发送验证码
...
setState(() {
_countdownTime = 60;
});
//开始倒计时
startCountdownTimer();
}
},
child: Text(
_countdownTime > 0 ? '$_countdownTime后重新获取' : '获取验证码',
style: TextStyle(
fontSize: 14,
color: _countdownTime > 0
? Color.fromARGB(255, 183, 184, 195)
: Color.fromARGB(255, 17, 132, 255),
),
),
)
四、倒计时的实现方法
void startCountdownTimer() {
const oneSec = const Duration(seconds: 1);
var callback = (timer) => {
setState(() {
if (_countdownTime < 1) {
_timer.cancel();
} else {
_countdownTime = _countdownTime - 1;
}
})
};
_timer = Timer.periodic(oneSec, callback);
}
五、最后在dispose()取消定时器
@override
void dispose() {
super.dispose();
if (_timer != null) {
_timer.cancel();
}
}
这样我们就实现了发送验证码的倒计时功能。除此之外,Timer还能做其他的很多事情,有兴趣的同学可以查看Timer的 官方文档 。
来源:http://examplecode.cn/2019/03/29/flutter-timer-countdown/


猜你喜欢
- Java的一个重要特性就是通过垃圾收集器(GC)自动管理内存的回收,而不需要程序员自己来释放内存。理论上Java中所有不会再被利用的对象所占
- java 中Spark中将对象序列化存储到hdfs摘要: Spark应用中经常会遇到这样一个需求: 需要将JAVA对象序列化并存储到HDFS
- Spring AOP proxyTargetClass的行为要点列表形式proxyTargetClasstrue目标对象实现了接口 – 使用
- 本文实例讲述了C#读取或设置ScrollLock状态的方法。分享给大家供大家参考。具体如下:C#读取或者设置ScrollLock状态,允许滚
- 1. LongAdder和AtomicLong类似的使用方式,但是性能比AtomicLong更好。LongAdder与AtomicLong都
- 一、No serializer found for class org.hibernate.proxy.pojo.bytebuddy.Byt
- 最近几天一直在看Hadoop相关的书籍,目前稍微有点感觉,自己就仿照着WordCount程序自己编写了一个统计关联商品。需求描述:根据超市的
- 动手写一个java版简单云相册,实现的功能是: 用户可以一次上传一个至多个文件。 用户可以下载其他人上传的图片。 用户可以查看其他所有人的图
- springboot集成 redispom文件<dependency> <groupId>
- 发现问题最近在项目中刚刚修改一个功能,代码正准备验证,启动Idea的debug模式,运行项目,发现启动失败,查看日志发现定时任务被重复执行,
- 新建线程新建线程很简单。只需要使用new关键字创建一个线程对象,然后调用它的start()启动线程即可。Thread thread1 = n
- 第一个SpringMvc HelloWorld无启动类springboot才有启动类前端操作访问项目名进入默认主页,显示一个链接点击链接后请
- 一.优先队列的应用优先队列在程序开发中屡见不鲜,比如操作系统在进行进程调度时一种可行的算法是使用优先队列,当一个新的进程被fork()出来后
- 下面给大家介绍C#使用ICSharpCode.SharpZipLib.dll进行文件的压缩与解压功能,具体代码如下所示:using Syst
- 本文实例讲述了Android编程实现将应用强制装到手机内存的方法。分享给大家供大家参考,具体如下:在Froyo(android 2.2,AP
- 基于Java的简单的企业员工管理系统,供大家参考,具体内容如下首先创建了一个员工类定义员工应有的属性:工号、姓名、性别、职位、年龄、工资、部
- 大致流程客户端根据远程服务的地址,客户端发送请求至服务端,服务端解析信息并找到对应的实现类,进行方法调用,之后将调用结果原路返回,客户端解析
- LocalDate类第一种:直接生成当前时间 LocalDate date = LocalDate.now();
- Random random = new Random((int)(DateTime.Now.Ticks)); &nbs
- 本文实例讲述了C#导出文本内容到word文档的方法。分享给大家供大家参考。具体实现方法如下:<%@ Page Language=&qu