Flutter倒计时/计时器的实现

作者: python草莓 | 来源:发表于2019-04-10 14:33 被阅读10次

    近期我会发一部分系列的flutter,大家觉得有用可以点点关注。

    在我们实现某些功能时,可能会有倒计时的需求。

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

    image.png

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

    一、引入Timer对应的库

    import 'dart:async';
    

    二、定义计时变量

    class _LoginPageState extends State<LoginPage> {
      ...
      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();
      }
    }
    

    这样我们就实现了发送验证码的倒计时功能。除此之外,Timer还能做其他的很多事情,有兴趣的同学可以查看Timer的官方文档

    image.png
    欢迎大家讨论留言,我们共同成长!!!

    相关文章

      网友评论

        本文标题:Flutter倒计时/计时器的实现

        本文链接:https://www.haomeiwen.com/subject/nxmniqtx.html