问题描述
我真的被这部分代码所困扰(我是Flutter的初学者)。我想显示秒表计时器和距geolocator的总距离,但是秒表只是在“ geolocation”移动时更新。
按下按钮时,我将其称为:
void _toggleListening() {
if (_positionStreamSubscription == null) {
const Locationoptions locationoptions =
Locationoptions(accuracy: LocationAccuracy.best);
final Stream<Position> positionStream =
Geolocator().getPositionStream(locationoptions);
_positionStreamSubscription = positionStream.listen((Position position) {
setState(() {
_positions.add(position);
_allPositions = _positions;
_positionRealTime = position;
updatePinOnMap();
print('all lenght ${_allPositions.length}');
totaldistanceAux = 0.0;
for (var i = 0; i < _allPositions.length - 1; i++) {
totaldistanceAux = totaldistanceAux +
distance.as(
LengthUnit.Meter,LatLng(_allPositions[i].latitude,_allPositions[i].longitude),LatLng(_allPositions[i + 1].latitude,_allPositions[i + 1].longitude),);
}
totaldistance = totaldistanceAux;
print('total distance $totaldistance');
});
});
_positionStreamSubscription.pause();
_stopwatch.stop();
} else {
setState(() {
if (_positionStreamSubscription.isPaused == true) {
_positionStreamSubscription.resume();
_stopwatch.start();
}
});
}
}
我正在与FutureBuilder一起显示:
FutureBuilder<GeolocationStatus>(
future: Geolocator().checkGeolocationPermissionStatus(),builder: (BuildContext context,AsyncSnapshot<GeolocationStatus> snapshot) {
距离和计时器工作正常,唯一的问题是计时器仅在发生一些移动时才更新。 这是我在StackOverflow上遇到的第一个问题,对不起,如果我做错了什么。谢谢!
解决方法
如果要定期重建窗口小部件,请添加timer_builder软件包并像这样使用它:
TimerBuilder.periodic(Duration(seconds: 1),builder: (context) {
return YourWidget();
}
)