近期我會發一部分系列的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的官方文件。
加群免費領取安卓進階學習視訊,原始碼,面試資料,群內有大牛一起交流討論技術;點選連結加入群聊【Android技術交流】:https://jq.qq.com/?_wv=1027&k=55YgqsK。 (包括java基礎與原理,自定義控制元件、NDK、架構設計、混合式開發(Flutter,Weex)、效能優化、完整商業專案開發等)
需要提取碼的可以私我