【问题标题】:Stop Timer periodic on other dateTime/NTPTime Flutter在其他 dateTime/NTPTime Flutter 上定期停止 Timer
【发布时间】:2021-07-30 08:52:41
【问题描述】:

我有 2 个函数调用 NTP 来获取本地日期时间。第一个使用Timer.periodic 像时钟一样工作,第二个用于获取用户点击按钮的时间。但是当我在第二个函数中显示时间时,它仍在运行Timer.periodic。如何避免这种情况?谢谢

我的代码:

Future<String> getNTPTime() async {
DateTime startDate = await NTP.now();
String currentDate = DateFormat('d MMMM yyyy').format(startDate);
String currentTime = DateFormat('kk : mm : ss').format(startDate);
print('NTP DateTime: $startDate');

if (mounted) {
  setState(() {
    _currentDate = currentDate;
    _currentTime = currentTime;
  });
}}

Future<String> getNTPTimeIn() async {
DateTime ntpTimeIn = await NTP.now();

String timeIn = DateFormat('kk : mm : ss').format(ntpTimeIn);
print('NTP DateTime: $ntpTimeIn');


if (mounted) {
  setState(() {
    _ntpTimeIn = timeIn;
  });
}}

并在 initState 中调用它

@override
super.initState();
getNTPTime();
Timer.periodic(Duration(seconds: 1), (timer) => getNTPTime());
}

当我显示_ntpTimeIn 时,Timer.periodic 仍在运行。

【问题讨论】:

    标签: flutter datetime timer ntp


    【解决方案1】:

    这就是你应该如何实现它。

    class YourClas extends StatefulWidget{
    Timer _timer;
    
    @override
    void initState(){
    super.initState();
    getNTPTime();
    _timer = Timer.periodic(Duration(seconds: 1), (timer) => getNTPTime());
    }
    
    @override
    void dispose(){
    if(_timer.isActive) _timer.cancel();
    super.dispose();
    }
    }
    

    然后当用户点击按钮调用_timer.cancel();停止Timer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-31
      • 2021-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-25
      相关资源
      最近更新 更多