簡體   English   中英

Flutter Timer.periodic register/run一次

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM