Flutter倒計時/計時器的實現

近期我會發一部分系列的flutter,你們以爲有用能夠點點關注。javascript

在咱們實現某些功能時,可能會有倒計時的需求。html

好比發送短信驗證碼,發送成功後可能要求用戶一段時間內不能再次發送,這時候咱們就須要進行倒計時,時間到了才容許再次操做。
以下圖:
java

image.png

爲了實現這樣場景的需求,咱們須要使用Timer.periodic面試

1、引入Timer對應的庫性能優化

import 'dart:async';
複製代碼

2、定義計時變量架構

class _LoginPageState extends State<LoginPage> {
  ...
  Timer _timer;
  int _countdownTime = 0;
  ...
}
複製代碼

3、點擊後開始倒計時
這裏咱們點擊發送驗證碼文字來舉例說明。async

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),
    ),
  ),
)
複製代碼

4、倒計時的實現方法ide

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);
}
複製代碼

5、最後在dispose()取消定時器性能

@override
void dispose() {
  super.dispose();
  if (_timer != null) {
    _timer.cancel();
  }
}
複製代碼

這樣咱們就實現了發送驗證碼的倒計時功能。除此以外,Timer還能作其餘的不少事情,有興趣的同窗能夠查看Timer的官方文檔
學習


歡迎你們討論留言,咱們共同成長!!!

加羣免費領取安卓進階學習視頻,源碼,面試資料,羣內有大牛一塊兒交流討論技術;點擊連接加入羣聊【Android技術交流】:https://jq.qq.com/?_wv=1027&k=55YgqsK。 (包括java基礎與原理,自定義控件、NDK、架構設計、混合式開發(Flutter,Weex)、性能優化、完整商業項目開發等)


須要提取碼的能夠私我

相關文章
相關標籤/搜索