首页 > 解决方案 > 像 setState() 一样使用 notifyListeners()

问题描述

我正在用颤振做一个计时器。最初,我使用带有 setState 的 statefulwidget,但目前我移动了计时器代码以使用提供程序。

现在的问题是,当我使用 setState 时间效果很好,但是当我使用 notifyListeners() 时,时间并没有立即过去,如何使用 notifyListeners() 来更改 setState 的时间?

设置状态代码

        _StartTimer() {
      startTime = formatted;
      start = new DateTime.now();
      start = elapsedTime > 0
          ? start.subtract(Duration(seconds: elapsedTime))
          : start;
      timer = Timer.periodic(Duration(seconds: 1), (timer) {
        setState(() {
          if (time > elapsedTime) {
            elapsedTime = DateTime.now().difference(start).inSeconds;
          } else {
            endTime = formatter.format(new DateTime.now());
            time = pomodoroTime * 60;
            elapsedTime = 0;
            ++count;
            _animationController.reverse();
            timer.cancel();
            bottomSheet();
          }
        });
      });
    }

notifyListeners() 代码

StartTimer() {
        startTime = formatted;
        start = new DateTime.now();
        start = elapsedTime > 0
            ? start.subtract(Duration(seconds: elapsedTime))
            : start;
        timer = Timer.periodic(Duration(seconds: 1), (timer) {
          if (time > elapsedTime) {
            elapsedTime = DateTime.now().difference(start).inSeconds;
          } else {
            endTime = formatter.format(new DateTime.now());
            time = pomodoroTime * 60;
            elapsedTime = 0;
            timer.cancel();
          }
          notifyListeners();
        });
      }

标签: flutterprovider

解决方案


推荐阅读