Flutter学习之倒计时计时器
1、自定义倒计时计时器控件:
import 'dart:async';
import 'package:flutter/material.dart';final TextStyle _availableStyle = TextStyle(fontSize: 16.0,color: Colors.pink[300],
);final TextStyle _unavailableStyle = TextStyle(fontSize: 16.0,color: Colors.grey[400],
);import 'dart:async';
import 'package:flutter/material.dart';final TextStyle _availableStyle = TextStyle(fontSize: 16.0,color: Colors.pink[300],
);final TextStyle _unavailableStyle = TextStyle(fontSize: 16.0,color: Colors.grey[400],
);/*
* 倒计时按钮
*/
class FormCode extends StatefulWidget {final int countdown; //倒计时的秒数,默认60秒final Function onTapCallback; //用户点击时的回调函数final bool available;FormCode({this.countdown,this.onTapCallback,this.available = false}); //是否可以获取验证码,默认为"false"@overrideState createState() => _FormCodeState();
}class _FormCodeState extends State<FormCode> {Timer _timer; //倒计时的计时器int _seconds; //当前倒计时的秒数TextStyle inkWellStyle = _availableStyle; //当前墨水瓶("InkWell")的字体样式String _verifyStr = "获取验证码"; 当前墨水瓶("InkWell")的文本bool isClickDisable=false;//防止点击过快导致Timer出现无法停止的问题@overridevoid initState() {super.initState();_seconds = widget.countdown;}@overridevoid dispose() {// TODO: implement disposesuper.dispose();}//启动倒计时计时器void _startTimer() {isClickDisable=true;_timer = Timer.periodic(Duration(seconds: 1), (timer) {if (_seconds == 0) {_seconds = widget.countdown;inkWellStyle = _availableStyle;_verifyStr = "重新发送";setState(() {});_cancleTimer();return;}_seconds--;_verifyStr = "已发送$_seconds" + "s";setState(() {});});}//取消到倒计时的计时器void _cancleTimer() {isClickDisable=false;_timer?.cancel();}@overrideWidget build(BuildContext context) {//墨水瓶组件,响应触摸的矩形区域if(isClickDisable==null){isClickDisable=false;//防止空指针异常}return widget.available? InkWell(child: Text('$_verifyStr',style: inkWellStyle,),onTap: (_seconds == widget.countdown)&&!isClickDisable? () {_startTimer();inkWellStyle = _unavailableStyle;_verifyStr = "已发送$_seconds" + "s";setState(() {});widget.onTapCallback();}: null,): InkWell(child: Text("获取验证码",style: _unavailableStyle,),);}
}
3、注意点:
计时器启动时间有1s延迟,点击事件在1s内连续点击多次会出现启动多个计时器问题导致计时器出现无法停止问题,所以需要控制点击事件1s内不能点击多次(或者计时器启动后不能再响应点击事件,等计时器停止后再次恢复点击事件)
来源友情链接:https://blog.csdn.net/hekaiyou/article/details/85613681(存在点击过快计时器无法停止问题)
Flutter学习之倒计时计时器相关推荐
- JavaScript 实现页面内时间实时倒计时 计时器内附完整文件欢迎调用(可用于抢购倒计时,记录恋爱纪念日总时长等)输出对应的天数小时分钟秒数
JavaScript 实现页面内时间倒计时 计时器 可用于抢购倒计时,记录恋爱纪念日总时长等输出对应的天数小时分钟秒数 注意:在下一个文章中将公布一个纪念日成品代码,欢迎各位来学习(复制) 第一步:构 ...
- Flutter 学习
Flutter 学习 参照:https://book.flutterchina.club/ 参照:https://flutter.cn/docs/development/platform-integr ...
- Flutter开发之倒计时/定时器(30)
倒计时/定时器在移动应用开发中比较常见的功能,比如启动时的广告倒计时.比如弹框倒计时.比如定时1秒后跳转.获取验证码等等.今天就认识一下Flutter中的倒计时/定时器. 一般有两种场景: 我只需要你 ...
- Flutter学习指南:文件、存储和网络
Flutter学习指南 交互.手势和动画 UI布局和控件 熟悉Dart语言 编写第一个应用 开发环境搭建 本篇文章我们先学习 Flutter IO 相关的基础知识,然后在 Flutter学习指南:交互 ...
- flutter学习(排雷)一
flutter官网:https://flutter.dev/docs/get-started/install 终于下定决心开始flutter学习了呢. 首先需要说的是flutter中的配置文件真的很严 ...
- flutter scrollview_简单易上手的Flutter学习指南App,2020一起来玩转Flutter吧~
Flutter是谷歌的移动UI框架,可以快速在iOS.Android.Web和PC上构建高质量的原生用户界面. Flutter可以与现有的代码一起工作.在全世界,Flutter正在被越来越多的开发者和 ...
- Flutter学习笔记(10)--容器组件、图片组件
如需转载,请注明出处:Flutter学习笔记(10)--容器组件.图片组件 上一篇Flutter学习笔记(9)--组件Widget我们说到了在Flutter中一个非常重要的理念"一切皆为组件 ...
- Flutter学习日记之底部导航栏BottomNavigationBar组件的使用
本文地址:https://blog.csdn.net/qq_40785165/article/details/116953235,转载需附上此地址 大家好,我是小黑,一个还没秃头的程序员~~~ 空袋子 ...
- iOS程序猿的flutter学习之路
日常学习Flutter开发的积累 推荐一些平时自己学习Flutter开发当中接触到的优秀文章 -------------------------基础知识 ----------------------- ...
最新文章
- 关于加密、签名、证书的作用及运用场景
- 多线程:一个线程在运行时发生异常会怎么样?
- python初始化函数_当你学会了Python爬虫,网上的图片素材就开始免费了
- 路径问题--转发、重定向、表单、超链接
- pytorch cpu版本安装_pytorch深度学习框架--gpu和cpu的选择
- MATLAB模糊控制算法,驾驶员制动意图识别
- steam 集换式卡牌挂卡软件 ASF Linux服务器搭建
- UFS 3.1协议分析(第一至四章) -- UFS概述
- F(x) - NU ABO 韩中(繁)ass字幕
- 用C语言求并集和交集
- 服务器主控芯片,物联网主控芯片6大架构分析 谁能独当一面
- 40个华丽的复古风格Photoshop教程
- Golang Context 详细原理和使用技巧
- Windows Server 2012/2016 桌面显示我的电脑图标
- 【强化学习】Q-Learning原理及代码实现
- 大学期间能考的计算机证书,大学期间可以考哪些证书?过来人告诉你这3大类最有用!...
- C--if else嵌套几种形式总结--不要忘记括号了,养成只要if大括号的习惯
- 玩转STM32F0 Value Line Discovery 之 深入理解 SYSTICK定时器
- 15. 简单工资管理系统设计
- 计算机导论——计算机网络05
热门文章
- 关于把小写数字转化为大写数字的java代码
- MyBatis学习笔记2 ——第一个MyBatis程序
- Android N App分屏模式完全解析(上)
- 【小黑屋】——总结反馈
- 目标检测网络的介绍及应用(一) -- 目标检测任务
- uniapp调用地图并导航
- word文件图标无法显示的问题
- sklearn提示cannot import name ‘MaskedArray‘ from ‘sklearn.utils.fixes‘的解决方法
- autocad.net通过支持文件搜索路径查找文件
- phase-portrait相轨迹