[英]Flutter Timer.periodic register/run once
我想在 main.dart 中運行一次計時器來檢查用戶活動
@override
void initState() {
super.initState();
initPlatformState();
_fetchMasterData("a", "b");
_startActivityTimer();
}
bool _activityTimerRunning = false;
void _startActivityTimer() {
if (!_activityTimerRunning) {
Timer.periodic(Duration(seconds: 5), (timer) {
_timerTicked(timer);
setState(() {
_activityTimerRunning = true;
});
print("Timer started");
});
}
}
但是 initState 被多次調用,因此它不是注冊計時器的正確位置。 應該放在哪里?
試試這個示例代碼。
int start = 5;
fName(){
Timer _timer;
const oneSecond = Duration(seconds: 5);
_timer = Timer.periodic(
oneSecond,
(Timer timer) => setState((){
if(start == 0)
timer.cancel();
else{
_activityTimerRunning = true;
start -= 1;
}
})
);
}
當你想啟動你的定時器時,調用 fName() 方法,然后定時器可以啟動。 所以你也可以檢查條件,當
if(start.= 0){... }
問題中的代碼有一個愚蠢的錯誤,打印語句在錯誤的位置。 這是工作代碼:
@override
void initState() {
super.initState();
initPlatformState();
_fetchMasterData("a", "b");
_startActivityTimer();
}
void _startActivityTimer() {
print("Timer started");
Timer.periodic(Duration(seconds: 5), (timer) {
_timerTicked(timer);
});
}
“TimerStarted”只執行一次
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.