亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

flutter實(shí)現(xiàn)發(fā)送驗(yàn)證碼功能

 更新時(shí)間:2022年03月23日 17:08:45   作者:ulddfhv  
這篇文章主要為大家詳細(xì)介紹了flutter發(fā)送驗(yàn)證碼功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

一個(gè)發(fā)送驗(yàn)證碼的需求:包括限制文本框輸入長度和只允許輸入數(shù)字

按慣例 先上圖:

class MyBody extends StatefulWidget {
 @override
 _MyBodyState createState() => _MyBodyState();
}
 
class _MyBodyState extends State<MyBody> {
 bool isButtonEnable=true;  //按鈕狀態(tài) 是否可點(diǎn)擊
 String buttonText='發(fā)送驗(yàn)證碼'; //初始文本
 int count=60;      //初始倒計(jì)時(shí)時(shí)間
 Timer timer;      //倒計(jì)時(shí)的計(jì)時(shí)器
 TextEditingController mController=TextEditingController();
 
 void _buttonClickListen(){
 setState(() {
  if(isButtonEnable){   //當(dāng)按鈕可點(diǎn)擊時(shí)
  isButtonEnable=false; //按鈕狀態(tài)標(biāo)記
  _initTimer();
 
  return null;   //返回null按鈕禁止點(diǎn)擊
  }else{     //當(dāng)按鈕不可點(diǎn)擊時(shí)
//  debugPrint('false');
  return null;    //返回null按鈕禁止點(diǎn)擊
  }
 });
 }
 
 
 void _initTimer(){
 timer = new Timer.periodic(Duration(seconds: 1), (Timer timer) {
  count--;
  setState(() {
  if(count==0){
   timer.cancel();    //倒計(jì)時(shí)結(jié)束取消定時(shí)器
   isButtonEnable=true;  //按鈕可點(diǎn)擊
   count=60;     //重置時(shí)間
   buttonText='發(fā)送驗(yàn)證碼';  //重置按鈕文本
  }else{
   buttonText='重新發(fā)送($count)'; //更新文本內(nèi)容
  }
  });
 });
 }
 
 
 @override
 void dispose() {
 timer?.cancel();  //銷毀計(jì)時(shí)器
 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('驗(yàn)證碼',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: ('填寫驗(yàn)證碼'),
       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),  //按鈕禁用時(shí)的顏色
      disabledTextColor: Colors.white,     //按鈕禁用時(shí)的文本顏色
      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('重新發(fā)送 (${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),
    ),
   ),
   ),
  ],
  ),
 );
 }
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論