近期我會發一部分系列的flutter,你們以爲有用能夠點點關注。javascript
在咱們實現某些功能時,可能會有倒計時的需求。html
好比發送短信驗證碼,發送成功後可能要求用戶一段時間內不能再次發送,這時候咱們就須要進行倒計時,時間到了才容許再次操做。
以下圖:
java
爲了實現這樣場景的需求,咱們須要使用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的官方文檔。
學習
須要提取碼的能夠私我