I have 2 function that call NTP
to get local date time. First one is working like a clock using Timer.periodic
and the second one for get the time when user tapped the button. But when I display the time in the second function its still runing the Timer.periodic
. How to avoid that? Thanks
My Code:
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;
});
}}
and call it in the initState
@override
super.initState();
getNTPTime();
Timer.periodic(Duration(seconds: 1), (timer) => getNTPTime());
}
when I display the _ntpTimeIn
the Timer.periodic
is still running.
This is how you should implement it.
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();
}
}
Then when user taps the button call _timer.cancel();
to stop the Timer