HERE地图无法使用地理定位器方法打开 - 颤振



我的应用程序正在加载一个HERE地图,并且可以使用一组手动输入的坐标作为中心点。

我已经在应用程序的另一部分实现了Geolocator,以产生用户位置,然后将其实现为一个功能,以查找其当前位置附近的地方&在地图上显示

我现在已经采取了Geolocator位置查找器,并希望使用它来打开用户位置上的地图。代码使用asyncawait获取用户坐标

map open函数不希望接受async/ await,但我已经尝试在自己的类中构建它并拉动坐标,但没有成功。

我是新手,任何建议都非常感谢

Async&Await目前在"打开地图的功能"中显示红色下划线,当我在"打开地图的功能"顶部将MapMarkerExample更改为mapMarkerExample时,_mapMarkerExample = MapMarkerExample (_showDialog, hereMapController);在"打开地图的命令"中显示红色下划线

命令打开地图

void _onMapCreated(HereMapController hereMapController) {
hereMapController.mapScene.loadSceneForMapScheme(MapScheme.normalDay, (MapError error) {
if (error == null) {
_mapMarkerExample = MapMarkerExample (_showDialog, hereMapController);
} else {
print("Map scene not loaded. MapError: " + error.toString());
}
});
}

打开地图的函数

MapMarkerExample(ShowDialogFunction showDialogCallback, HereMapController hereMapController) async {
_showDialog = showDialogCallback;
_hereMapController = hereMapController;
Position position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
var lat = position.latitude;
var long = position.longitude;
double distanceToEarthInMeters = 8000;
_hereMapController.camera.lookAtPointWithDistance(
GeoCoordinates(lat, long), distanceToEarthInMeters);

_setTapGestureHandler();
_showDialog("Note", "Tap markers for more.");
}

问题是MapMarkerExample()是一个构造函数,而构造函数不能异步执行。

解决这个问题的一个可能方法是不在MapMarkerExample()构造函数中设置坐标。只需调用它来创建实例。然后在第二个方法_setMapTarget()中,您可以设置地图的中心坐标。

_setMapTarget()被标记为async,因此它将立即执行,并且不会阻塞_onMapCreated()。但它稍后会做一些神奇的事情,获取位置一旦它有了位置,它会更新相机

如果获取位置需要很长时间,那么你将在这段时间内看到地图的默认相机位置。

void _onMapCreated(HereMapController hereMapController) {
hereMapController.mapScene.loadSceneForMapScheme(MapScheme.normalDay, (MapError? error) {
if (error == null) {
_mapMarkerExample = MapMarkerExample(_showDialog, hereMapController);
_setMapTarget(hereMapController);
} else {
print("Map scene not loaded. MapError: " + error.toString());
}
});
}
Future<void> _setMapTarget(HereMapController hereMapController) async {
Position position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
var lat = position.latitude;
var long = position.longitude;
double distanceToEarthInMeters = 8000;
hereMapController.camera.lookAtPointWithDistance(GeoCoordinates(lat, long), distanceToEarthInMeters);
}

最新更新