我正在使用一个登录系统,在该系统上我通过OTP对用户进行身份验证,在此我想在用户每次单击时禁用Resend OTP按钮30秒钟。
用true声明布尔值onPressedValue变量,在onPressed参数中添加条件。
bool onPressedValue=true;
RaisedButton(
child: Text('OTP'),
onPressed: onPressedValue==true?(){
setState((){
onPressedValue=false;
});
Timer(Duration(seconds: 30),(){
setState((){
onPressedValue=true;
});
});
}:null)
您可以尝试这个
全局声明这样的变量调用
bool shouldButtonEnabled=true;
然后单击“发送OTP”按钮将调用此方法,而其他诸如发送OTP的操作之后将调用此方法
_disabledButton(){
shouldButtonEnabled=false;
Timer(
Duration(seconds: 30),
() => shouldButtonEnabled=true);
}
并且在像这样重新发送OTP按钮时检查此布尔值
onPressed: () {
if(shouldButtonEnabled){
//do your work here
}
}
如果您想拥有一个实时计数器来向用户显示秒数,则应使用流构建器
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上找到完整的代码
new Handler().postDelayed(new Runnable()
{
public void run()
{
b1.setEnabled(false);
}
}, 30000 //Specific time in milliseconds
);