Flutter实现2秒后打印经纬度遇问题:定时器持续运行至100秒
问题分析与解决方案
你的核心问题是误用了周期性定时器来实现“单次延迟执行”的需求,再加上start变量初始值为100,导致定时器会循环执行100次才停止,完全不符合“2秒后打印一次经纬度”的预期。
正确实现方式
要实现“延迟2秒后执行一次操作”,应该使用一次性定时器(Timer的非周期性构造),而非Timer.periodic(用于周期性重复执行的定时器)。
修改后的代码如下:
void startTimer() { // 一次性定时器:延迟2秒后执行回调 timer2 = Timer(const Duration(seconds: 2), () { // 打印当前经纬度,若无需触发UI更新则不需要setState print("My current location ${homeMapCtrl!.userCurrentLatLng}"); // 如果需要同步更新UI,再调用setState // setState(() {}); }); }
额外注意事项
- 务必在组件的
dispose方法中取消定时器,避免内存泄漏:@override void dispose() { timer2?.cancel(); super.dispose(); } - 确保
homeMapCtrl!.userCurrentLatLng在定时器触发时已完成初始化,避免空指针异常。如果在Consumer中调用该方法,要保证对应的状态数据已准备就绪。
内容的提问来源于stack exchange,提问作者Mahnoor Waheed
相关产品推荐
相关产品推荐

