flutter实现发送验证码功能

作者:ulddfhv 时间:2023-07-05 19:03:12 

一个发送验证码的需求:包括限制文本框输入长度和只允许输入数字

按惯例 先上图:

flutter实现发送验证码功能


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
  • asp之家 软件编程 m.aspxhome.com