flutter实现发送验证码功能
作者:ulddfhv 时间:2023-07-05 19:03:12
一个发送验证码的需求:包括限制文本框输入长度和只允许输入数字
按惯例 先上图:
class MyBody extends StatefulWidget {
@override
_MyBodyState createState() => _MyBodyState();
}
class _MyBodyState extends State<MyBody> {
bool isButtonEnable=true; //按钮状态 是否可点击
String buttonText='发送验证码'; //初始文本
int count=60; //初始倒计时时间
Timer timer; //倒计时的计时器
TextEditingController mController=TextEditingController();
void _buttonClickListen(){
setState(() {
if(isButtonEnable){ //当按钮可点击时
isButtonEnable=false; //按钮状态标记
_initTimer();
return null; //返回null按钮禁止点击
}else{ //当按钮不可点击时
// debugPrint('false');
return null; //返回null按钮禁止点击
}
});
}
void _initTimer(){
timer = new Timer.periodic(Duration(seconds: 1), (Timer timer) {
count--;
setState(() {
if(count==0){
timer.cancel(); //倒计时结束取消定时器
isButtonEnable=true; //按钮可点击
count=60; //重置时间
buttonText='发送验证码'; //重置按钮文本
}else{
buttonText='重新发送($count)'; //更新文本内容
}
});
});
}
@override
void dispose() {
timer?.cancel(); //销毁计时器
timer=null;
super.dispose();
}
@override
Widget build(BuildContext context) {
return Container(
child: Column(
// mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Container(
color: Colors.white,
padding: EdgeInsets.only(left: 10,right: 10),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
// crossAxisAlignment: CrossAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.baseline,
textBaseline: TextBaseline.ideographic,
children: <Widget>[
Text('验证码',style: TextStyle(fontSize: 13,color: Color(0xff333333)),),
Expanded(
child: Padding(padding: EdgeInsets.only(left: 15,right: 15,top: 15),
child: TextFormField(
maxLines: 1,
onSaved: (value) { },
controller: mController,
textAlign: TextAlign.left,
inputFormatters: [WhitelistingTextInputFormatter.digitsOnly,LengthLimitingTextInputFormatter(6)],
decoration: InputDecoration(
hintText: ('填写验证码'),
contentPadding: EdgeInsets.only(top: -5,bottom: 0),
hintStyle: TextStyle(
color: Color(0xff999999),
fontSize: 13,
),
alignLabelWithHint: true,
border: OutlineInputBorder(borderSide: BorderSide.none),
),
),),
),
Container(
width: 120,
child: FlatButton(
disabledColor: Colors.grey.withOpacity(0.1), //按钮禁用时的颜色
disabledTextColor: Colors.white, //按钮禁用时的文本颜色
textColor:isButtonEnable?Colors.white:Colors.black.withOpacity(0.2), //文本颜色
color: isButtonEnable?Color(0xff44c5fe):Colors.grey.withOpacity(0.1), //按钮的颜色
splashColor: isButtonEnable?Colors.white.withOpacity(0.1):Colors.transparent,
shape: StadiumBorder(side: BorderSide.none),
onPressed: (){ setState(() {
_buttonClickListen();
});},
// child: Text('重新发送 (${secondSy})'),
child: Text('$buttonText',style: TextStyle(fontSize: 13,),),
),
),
],
),
),
Container(
width: double.infinity,
height: 45,
margin: EdgeInsets.only(top: 50,left: 10,right: 10),
child: RaisedButton(
onPressed: () {
debugPrint('${mController.text}');
},
shape: StadiumBorder(side: BorderSide.none),
color: Color(0xff44c5fe),
child: Text(
'下一步',
style: TextStyle(color: Colors.white,fontSize: 15),
),
),
),
],
),
);
}
}
来源:https://blog.csdn.net/ulddfhv/article/details/93435111
标签:flutter,验证码
0
投稿
猜你喜欢
教你怎么在IDEA中创建java多模块项目
2023-05-28 19:25:58
详解C# 反射(Reflection)
2021-09-08 14:42:59
Android图片色彩变换实现方法
2022-03-21 07:23:32
Java8 HashMap遍历方式性能探讨
2022-01-31 08:48:11
Java8使用stream实现list中对象属性的合并(去重并求和)
2023-06-23 13:44:40
Lombok为啥这么牛逼?SpringBoot和IDEA官方都要支持它
2021-10-18 23:04:50
经典实例讲解C#递归算法
2022-04-11 22:34:16
Flutter路由守卫拦截的实现
2021-11-12 21:24:12
保持Android Service在手机休眠后继续运行的方法
2022-01-01 20:36:12
Spring Boot 与 Kotlin 上传文件的示例代码
2022-08-24 10:24:08
C#中可枚举类型详解
2023-03-24 20:39:15
java中使用interrupt通知线程停止详析
2023-09-03 11:41:26
Java中websocket消息推送的实现代码
2023-06-02 09:26:56
Android Flutter使用本地数据库编写备忘录应用
2023-09-15 17:24:09
Java语言实现数据结构栈代码详解
2021-12-09 16:15:05
android如何获取联系人所有信息
2021-10-24 13:24:41
基于@Bean修饰的方法参数的注入方式
2022-09-16 06:45:14
Android实现闹钟功能小Dome
2022-09-11 09:27:14
Java数据结构之链表、栈、队列、树的实现方法示例
2021-10-07 10:40:29
为Android系统添加config.xml 新配置的设置
2022-02-19 23:31:48