想要在用户单击按钮后禁用按钮30秒钟,然后在抖动中自动启用它

问题描述 投票:0回答:4

我正在使用一个登录系统,在该系统上我通过OTP对用户进行身份验证,在此我想在用户每次单击时禁用Resend OTP按钮30秒钟。

android flutter authentication flutter-web otp
4个回答
0
投票

用true声明布尔值onPressedValue变量,在onPressed参数中添加条件。

bool onPressedValue=true;

RaisedButton(
  child: Text('OTP'),
  onPressed: onPressedValue==true?(){
  setState((){
  onPressedValue=false;

  });
    Timer(Duration(seconds: 30),(){
      setState((){
        onPressedValue=true;
      });
    });

}:null)

0
投票

您可以尝试这个

全局声明这样的变量调用

bool shouldButtonEnabled=true;

然后单击“发送OTP”按钮将调用此方法,而其他诸如发送OTP的操作之后将调用此方法

  _disabledButton(){
    shouldButtonEnabled=false;
    Timer(
        Duration(seconds: 30),
            () => shouldButtonEnabled=true);
  }

并且在像这样重新发送OTP按钮时检查此布尔值

 onPressed: () {
            if(shouldButtonEnabled){
              //do your work here
            }
    }

0
投票

如果您想拥有一个实时计数器来向用户显示秒数,则应使用流构建器

            StreamBuilder(
              stream: _timerStream.stream,
              builder: (BuildContext ctx,
                  AsyncSnapshot snapshot) {
                return SizedBox(
                  width: 300,
                  height: 30,
                  child:RaisedButton(
                  textColor: Theme.of(context)
                      .accentColor,
                  child: Center(
                      child:
                      snapshot.data == 0 ?
                      Text('send code again')
                          : Row(
                        mainAxisAlignment: MainAxisAlignment.center,
                        children: <Widget>[
                          Text(' button will be enable after ${snapshot.hasData ? snapshot.data.toString() : 30} seconds '),
                        ],)
                  ),
                  onPressed: snapshot.data == 0 ? () {
                    // your sending code method

                    _timerStream.sink.add(30);
                    activeCounter();
                  } : null,
                )
                );
              },
            )

您可以通过[link在dartpad.dev上找到完整的代码


-1
投票
new Handler().postDelayed(new Runnable() 
    {
        public void run() 
        {
            b1.setEnabled(false);
        }
    }, 30000    //Specific time in milliseconds
);
© www.soinside.com 2019 - 2024. All rights reserved.