zoukankan      html  css  js  c++  java
  • 【Flutter】倒计时/计时器的实现

    比如发送短信验证码,发送成功后可能要求用户一段时间内不能再次发送,这时候我们就需要进行倒计时,时间到了才允许再次操作。

    为了实现这样场景的需求,我们需要使用Timer.periodic

    如下图:

     
     

    一、引入Timer对应的库

    import 'dart:async';

    二、定义计时变量

    class _LoginPageState extends State{
      ...
      Timer _timer;
      int _countdownTime = 0;
      ...
    }

    三、点击后开始倒计时
    这里我们点击发送验证码文字来举例说明。

    GestureDetector(
      onTap: () {
        if (_countdownTime == 0 && validateMobile()) {
          //Http请求发送验证码
          ...
          setState(() {
            _countdownTime = 60;
          });
          //开始倒计时
          startCountdownTimer();
        }
      },
      child: Text(
        _countdownTime > 0 ? '$_countdownTime后重新获取' : '获取验证码',
        style: TextStyle(
          fontSize: 14,
          color: _countdownTime > 0
              ? Color.fromARGB(255, 183, 184, 195)
              : Color.fromARGB(255, 17, 132, 255),
        ),
      ),
    )

    四、倒计时的实现方法

    void startCountdownTimer() {
      const oneSec = const Duration(seconds: 1);
    
      var callback = (timer) => {
        setState(() {
          if (_countdownTime < 1) { _timer.cancel(); } else { _countdownTime = _countdownTime - 1; } }) }; _timer = Timer.periodic(oneSec, callback); }

    五、最后在dispose()取消定时器

    @override
    void dispose() {
      super.dispose();
      if (_timer != null) {
        _timer.cancel();
      }
    }
     
  • 相关阅读:
    testd3p
    my open音频的
    1
    one play
    ndk ffmpeg实践2
    ndk ffmpeg实践
    Mac ndk21 交叉ffmpeg目前
    ffmpeg交叉
    and cmake 链接库及播放例子 及读文件
    更正之前《登录小案例》密码错3次15分钟内不准登录
  • 原文地址:https://www.cnblogs.com/sangwl/p/10873579.html
Copyright © 2011-2022 走看看