import 'dart:async';
import 'package:flutter/material.dart';
/// 墨水瓶(`InkWell`)可用時使用的字體樣式。
final TextStyle _availableStyle = TextStyle(
fontSize: 16.0,
color: const Color(0xFF00CACE),
);
/// 墨水瓶(`InkWell`)不可用時使用的樣式。
final TextStyle _unavailableStyle = TextStyle(
fontSize: 16.0,
color: const Color(0xFFCCCCCC),
);
class TimerSMSWidget extends StatefulWidget {
/// 倒計(jì)時的秒數(shù),默認(rèn)60秒。
final int countdown;
/// 用戶點(diǎn)擊時的回調(diào)函數(shù)。
final Function onTapCallback;
/// 是否可以獲取驗(yàn)證碼,默認(rèn)為`false`。
final bool available;
TimerSMSWidget({
this.countdown: 60,
this.onTapCallback,
this.available: false,
});
@override
_TimerSMSWidgetState createState() => _TimerSMSWidgetState();
}
class _TimerSMSWidgetState extends State<TimerSMSWidget> {
/// 倒計(jì)時的計(jì)時器。
Timer _timer;
/// 當(dāng)前倒計(jì)時的秒數(shù)。
int _seconds;
/// 當(dāng)前墨水瓶(`InkWell`)的字體樣式。
TextStyle inkWellStyle = _availableStyle;
/// 當(dāng)前墨水瓶(`InkWell`)的文本。
String _verifyStr = '獲取驗(yàn)證碼';
@override
void initState() {
super.initState();
_seconds = widget.countdown;
}
/// 啟動倒計(jì)時的計(jì)時器。
void _startTimer() {
// 計(jì)時器(`Timer`)組件的定期(`periodic`)構(gòu)造函數(shù),創(chuàng)建一個新的重復(fù)計(jì)時器。
_timer = Timer.periodic(Duration(seconds: 1), (timer) {
if (_seconds == 0) {
_cancelTimer();
_seconds = widget.countdown;
inkWellStyle = _availableStyle;
setState(() {});
return;
}
_seconds--;
_verifyStr = '已發(fā)送$_seconds' + 's';
setState(() {});
if (_seconds == 0) {
_verifyStr = '重新發(fā)送';
}
});
}
/// 取消倒計(jì)時的計(jì)時器。
void _cancelTimer() {
// 計(jì)時器(`Timer`)組件的取消(`cancel`)方法,取消計(jì)時器。
_timer?.cancel();
}
@override
Widget build(BuildContext context) {
// 墨水瓶(`InkWell`)組件,響應(yīng)觸摸的矩形區(qū)域。
return widget.available
? InkWell(
child: Text(
' $_verifyStr ',
style: inkWellStyle,
),
onTap: (_seconds == widget.countdown)
? () {
_startTimer();
inkWellStyle = _unavailableStyle;
_verifyStr = '已發(fā)送$_seconds' + 's';
setState(() {});
widget.onTapCallback();
}
: null,
)
: InkWell(
child: Text(
' 獲取驗(yàn)證碼 ',
style: _unavailableStyle,
),
);
}
}
Flutter定時器
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。