0

我想在 main.dart 中运行一次 Timer 来检查用户活动

@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 被多次调用,因此它不是注册计时器的正确位置。应该放在哪里?

4

2 回答 2

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”只执行一次

于 2020-05-04T08:06:17.367 回答
0

试试这个示例代码。

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){ ... }

于 2020-05-04T07:05:16.807 回答